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);
lengthIsValid = true;
}
return textLength;
}
由于在const成员函数内不能赋值给textLength和lengthIsValid,所以是错误的,解决办法是:利用C++的一个与const相关的摆动场:mutable(可变的).
class CTextBlock{
public:
std::size_t length() const;
private:
char *pText;
mutable std::size_t textLength;
mutable bool lengthIsValid;
};
std::size_t CTextBlock::length()const
{
if (!lengthIsValid)
{
textLength = std::strlen(pText);
lengthIsValid = true;
}
return textLength;
}
加了mutable,说明这些成员变量可能总是会改变,即使是在const成员函数内。
(来自Effective C++)