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 }
  • 相关阅读:
    设计模式JS中的单例模式应用(一)
    SSD5_ Exercise 4分析
    JavaEE学习笔记
    SSD5_Exercise5分析
    SSD5_Optional Exercise6分析
    ACM相关网站
    hdu 2066 一个人的旅行【Dijkstra 12级新生训练—图论E】
    新队员图论基础_【CSUST_12级训练】
    hdu 2112 Today【F map + Floyd 入门训练】
    turtle库笔记
  • 原文地址:https://www.cnblogs.com/csxcode/p/3851484.html
Copyright © 2011-2022 走看看