关于 const 成员函数

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

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

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

 class CTextBlock
{
public:
......
std::size_t length() const; private:
char* pText;
std::size_t textLength;
bool lengthIsValid;
}; std::size_t CTextBlock::length() const
{
if (!lengthIsValid)
{
textLength = std::strlen(pText);// 发生错误,在const成员内不能赋值给textLength和lengthIsValid
lengthIsValid = true;
}
return textLength;
}

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

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

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

 class CTextBlock
{
public:
......
std::size_t length() const; private:
char* pText;
mutable std::size_t textLength;//这些成员变量可能总是会被改变,即使是在const成员函数内
mutable bool lengthIsValid;
}; std::size_t CTextBlock::length() const
{
if (!lengthIsValid)
{
textLength = std::strlen(pText);//现在可以这样了
lengthIsValid = true;
}
return textLength;
}
上一篇:[小技巧]Filezilla无法确定拖放操作目标,由于shell未正确安装__解决办法


下一篇:C++ Const成员函数