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