• 关于 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() const
    14 {
    15     if (!lengthIsValid)
    16     {
    17         textLength = std::strlen(pText);// 发生错误,在const成员内不能赋值给textLength和lengthIsValid
    18         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() const
    14 {
    15     if (!lengthIsValid)
    16     {
    17         textLength = std::strlen(pText);//现在可以这样了
    18         lengthIsValid = true;
    19     }
    20     return textLength;
    21 }
  • 相关阅读:
    python+opencv 运行环境搭建
    centos 安装 FLEXPART
    centos 安装npm node
    USACO4.3 Street Race【分析】
    USACO4.3 Letter Game【枚举·细节】
    结构体封装高精度 大整数BigInt
    POJ3585 Accumulation Degree【换根dp】
    换根dp特征总结
    HDU2196 Computer【换根dp】
    CF1187E Tree Painting【换根dp】
  • 原文地址:https://www.cnblogs.com/csxcode/p/3851484.html
Copyright © 2020-2023  润新知