mutable(可变动的)
下面是例子:
#ifndef TEXT_BLOCK_H_
#define TEXT_BLOCK_H_
class TextBlock
{
public:
// ......... //
std::size_t length() const;
private:
char* pText;
std::size_t textLength; // 最近一次计算的文本区块长度
bool lengthIsValid; // 目前长度是否有效
};
////////////////////////////////////////////////////////
std::size_t length() const
{
if (!lengthIsValid){
textLength = std::strlen(pText); // 错误!!!在const成员函数内
lengthIsValid = true; // 不能给 textLength 和 lengthIsValid 赋值
}
return textLength;
}
//////////////////////////////////////////////////////
// 如果要在const成员函数内 给textLength 和 lengthIsValid 赋值
// 可以这么写:
class TextBlock
{
public:
// ....... //
std::size_t length() const;
private:
char* pText;
mutable std::size_t textLength; // 这些变量可能总是会被更改
mutable bool lengthIsValid; // 即使是在const成员函数内。
};
//////////////////////////////////////////////////////
std::size_t length() const
{
if (!lengthIsValid){
textLength = std::strlen(pText); // 正确!!!
lengthIsValid = true; // 现在可以给textLength 和 lengthIsValid 赋值
}
return textLength;
}
//////////////////////////////////////////////////////
#endif