笔记2 Effective C++

知识点 mutable

class CTextBlock {
    
    
public:
	...
		std::size_t length() const;
private:
	char* pText;
	std::size_t textLengeh;		//最近一次计算的文本区块长度
	bool lengthIsValid;			// 目前的长度是否有效
};

std::size_t CTextBlock::length() const
{
    
    
	if (!lengthIsValid) {
    
    
		textLengeh = std::strlen(pText);	//错误! 在const成员函数内
		lengthIsValid = true;				// 不能复制给textLength 和 lengthIsValid。
	}
	return textLengeh;
}

解决上述问题的方法很简单:利用C++的一个与const相关的摆动场:mutable(可变的)。mutable释放掉non-static成员变量的bitwist constness约束

class CTextBlock {
    
    
public:
	...
		std::size_t  length() const;
private:
	char* pText;
	mutable std::size_t textLength;			//这些成员变量可能总是会被更改
	mutable bool lengthIsValid;				//及时在const成员函数内
};

std::size_t CTextBlock::length() const
{
    
    
	if (!lengthIsValid) {
    
    
		textLength = std::strlen(pText);	//现在, 可以这样
		lengthIsValid = true;				//也可以这样
	}
	return textLength;
}

知识点

在这里插入图片描述

知识点

在这里插入图片描述
若要不想编译器自动生成default构造函数,copy构造函数,copy assignment操作符,只需要将这些函数声明成private,就可以了。

猜你喜欢

转载自blog.csdn.net/jlm7689235/article/details/107683678