zoukankan      html  css  js  c++  java
  • 关于 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 基础-----数字,字符串,列表,字典类型简单介绍
    Pycharm快捷键的使用
    学习PYTHON之路, DAY 3
    购物车
    三级菜单
    模拟登录
    学习PYTHON之路, DAY 2
    学习PYTHON之路, DAY 1
    SSFOJ P1453 子序列(一) 题解
  • 原文地址:https://www.cnblogs.com/csxcode/p/3851484.html
Copyright © 2011-2022 走看看