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 }
  • 相关阅读:
    java的基本数据类型有八种:
    BZOJ 1003 [ZJOI2006]物流运输trans
    BZOJ 1002 [FJOI2007]轮状病毒
    BZOJ 1001 [BeiJing2006]狼抓兔子
    FFT修正
    主席树修正
    COJ 0995 WZJ的数据结构(负五)区间操作
    COJ 1010 WZJ的数据结构(十) 线段树区间操作
    COJ 0999 WZJ的数据结构(负一)
    AC自动机修正
  • 原文地址:https://www.cnblogs.com/csxcode/p/3851484.html
Copyright © 2011-2022 走看看