关于 const 成员函数
2014-07-17 16:49
363 查看
成员函数如果是const意味着什么?
有两个流行概念:物理常量性和逻辑常量性。
C++对常量性的定义采用的是物理常量性概念,即const 成员函数不可以更改对象内任何non-static成员变量。例如:
上面代码中发生错误,在const成员内不能赋值给textLength和lengthIsValid,怎样解决呢?
解决方法很简单:利用C++的一个与const相关的摆动场:mutable。
mutable释放掉non-static成员变量的物理常量性约束:
有两个流行概念:物理常量性和逻辑常量性。
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; }
相关文章推荐
- 关于在函数前加const 和成员函数后加const 的记录
- 关于C++的右值、const引用、右值引用、const成员函数及相关扩展
- 关于 const 成员函数
- 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友
- C++关于参数为const引用类型的函数调用参数成员函数的一个问题
- 关于常量成员函数(const member function)
- C++关于类成员函数在参数列表后加const的作用,以及使用条件
- 关于类成员函数结尾带const和不带const的问题
- 关于 类成员函数返回指向const临时变量的引用
- 关于const成员函数
- 关于成员函数的Command模式的简单实现
- const成员函数使用规则
- 类成员函数后带const
- 关于string的成员函数substr
- const成员函数和非const成员函数返回引用的问题
- const成员函数使用问题
- 有关static成员函数不能用const修饰的问题
- const成员函数
- 关于c++的静态数据(函数)成员的理解
- 关于成员函数和有元函数