首页 > 代码库 > 关于 const 成员函数
关于 const 成员函数
成员函数如果是const意味着什么?
有两个流行概念:物理常量性和逻辑常量性。
C++对常量性的定义采用的是物理常量性概念,即const 成员函数不可以更改对象内任何non-static成员变量。例如:
1 class CTextBlock 2 { 3 public: 4 ...... 5 std::size_t length() const; 6 7 private: 8 char* pText; 9 std::size_t textLength;10 bool lengthIsValid;11 };12 13 std::size_t CTextBlock::length() const14 {15 if (!lengthIsValid)16 {17 textLength = std::strlen(pText);// 发生错误,在const成员内不能赋值给textLength和lengthIsValid18 lengthIsValid = true;19 }20 return textLength;21 }
上面代码中发生错误,在const成员内不能赋值给textLength和lengthIsValid,怎样解决呢?
解决方法很简单:利用C++的一个与const相关的摆动场:mutable。
mutable释放掉non-static成员变量的物理常量性约束:
1 class CTextBlock 2 { 3 public: 4 ...... 5 std::size_t length() const; 6 7 private: 8 char* pText; 9 mutable std::size_t textLength;//这些成员变量可能总是会被改变,即使是在const成员函数内10 mutable bool lengthIsValid;11 };12 13 std::size_t CTextBlock::length() const14 {15 if (!lengthIsValid)16 {17 textLength = std::strlen(pText);//现在可以这样了18 lengthIsValid = true;19 }20 return textLength;21 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。