关于 const 成员函数

成员函数如果是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)