码迷,mamicode.com
首页 > 其他好文 > 详细

关于 const 成员函数

时间:2014-07-17 18:37:53      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   代码   re   div   

成员函数如果是const意味着什么?

有两个流行概念:物理常量性和逻辑常量性。

C++对常量性的定义采用的是物理常量性概念,即const 成员函数不可以更改对象内任何non-static成员变量。例如:

 1 class CTextBlock
 2 {
 3 public:
 4   ......
 5   std::size_t length() const;
 6 
 7 private:
 8     char* pText;
 9     std::size_t textLength;
10     bool lengthIsValid;
11 };
12 
13 std::size_t CTextBlock::length() const
14 {
15     if (!lengthIsValid)
16     {
17         textLength = std::strlen(pText);// 发生错误,在const成员内不能赋值给textLength和lengthIsValid
18         lengthIsValid = true;
19     }
20     return textLength;
21 }

上面代码中发生错误,在const成员内不能赋值给textLength和lengthIsValid,怎样解决呢?

解决方法很简单:利用C++的一个与const相关的摆动场:mutable。

mutable释放掉non-static成员变量的物理常量性约束:

 1 class CTextBlock
 2 {
 3 public:
 4   ......
 5   std::size_t length() const;
 6 
 7 private:
 8     char* pText;
 9     mutable std::size_t textLength;//这些成员变量可能总是会被改变,即使是在const成员函数内
10     mutable bool lengthIsValid;
11 };
12 
13 std::size_t CTextBlock::length() const
14 {
15     if (!lengthIsValid)
16     {
17         textLength = std::strlen(pText);//现在可以这样了
18         lengthIsValid = true;
19     }
20     return textLength;
21 }

关于 const 成员函数,布布扣,bubuko.com

关于 const 成员函数

标签:style   blog   color   代码   re   div   

原文地址:http://www.cnblogs.com/csxcode/p/3851484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!