const 修饰指针:如果关键字const出现在星号*左边,表示被指物是常量,如果const出现在*右边表示指针自身是常量, 如果出现在两边表示被指物和指针都是常量;

  const std::vector<int>::iterator iter = vec.begin(); //iter的作用就像是T* const; ++iter;错误

  std::vector<int>::const_iterator cIter = vec.begin(); //cIter的作用像个const T*; *cIter = 10;错误

  const 修饰函数返回值:将operator*的返回值声明为const类型避免(a*b) = c;这种没意思的赋值动作

const 成员函数:表示该成员函数可以作用于const对象身上

  两个成员函数只是常量性不同,可以被重载

  bitwise constness:const成员函数不可以更改对象任何non-static成员变量

  class CTextBlock{

  public:

    std::size_t length() const;

  private:

    char* pText;

    sdt::size_t textLength;

    bool lengthValid;

  };

  std::size_t CTextBlock::length() const

  {

    if(!lengthIsValid)

    {

      textLength = std::strlen(pText);  //错误!在const成员函数内不能赋值给

      lengthIsValid = ture;        //textLength和lengthValid

    }

  }

  此时可以用一个与const相关的摆动场:mutable(可变的)释放掉non-static成员变量的bitwise constness约束

  class CTextBlock{

  public:

    std::size_t length() const;

  private:

    char* pText;

    mutable sdt::size_t textLength;

    mutable bool lengthValid;

  };

  std::size_t CTextBlock::length() const

  {

    if(!lengthIsValid)

    {

      textLength = std::strlen(pText);  //现在可以改变textLength

      lengthIsValid = ture;        //和lengthValid

    }

  }

在const成员函数和non-const成员函数中避免重复:用non-const调用const兄弟经过两次转换,反向做法不应该const成员函数不改变其对象的逻辑状态

  class TextBlock{

  public:

    const char& operator[](std::size_t position) const

    {

      ......

      return text[opsition];

    }

    char& operator[](std::size_t position)

    {

      return

        const_cast<char&>(              //将op[]的返回值的const移除

          static_cast<const TextBlock&>(*this)[]   //为*this加上const调用op[]

        );

    }

  };

转载于:https://www.cnblogs.com/lidan/archive/2012/01/05/2313793.html

effective C++ 条款 3:尽可能使用const相关推荐

  1. [Effective C++读书笔记]003_条款03_尽可能使用const

    参考同事博客:http://www.cnblogs.com/hustcser/archive/2012/10/19/2731085.html 转载于:https://www.cnblogs.com/a ...

  2. Effective C++ 条款1、2、3、4

    以下内容均来自Scott Meyers大师所著Effective C++ version3,如有错误地方,欢迎指正!相互学习,促进!! 条款1 视C++为一个语言联邦 理解C++,须认识其主要的次语言 ...

  3. 【Effective C++ 条款03 笔记】尽可能使用const

    条款03:尽可能使用const 一.顶层const和底层const 区分一下: int a = 1; const int* pa = a;//底层const,a的值不能变 int b = 2; int ...

  4. Effective C++ 条款02:尽量使用const,enum,inline替换#define

    Effective C++ 条款02:尽量使用const,enum,inline替换#define 用另一句话说:用编译器代替预处理器比较好. 举个例子:加入定义一个常量: #define ASPEC ...

  5. 条款 03:尽可能使用const

    条款 03:尽可能使用const 1.请记住 2.原因 3.const用法 3.1.在classes外部修饰global或namespace作用域中的常量 3.2.修饰文件.函数.或区块作用域中被声明 ...

  6. char* 赋值 const char* 释放_Effective C++读书笔记之条款3:尽可能使用const

    点击上方蓝字关注我们 C++的const关键字会强制编译器实施保持某个值不变的约束,帮助你在编译期间就能发现错误,灵活使用const能提高代码质量还能避免不想被改变的值被修改.下面我将从const作用 ...

  7. Effective C++条款粗略总结

    文章目录 Effective C++ 1.类/结构体 2.资源管理 3.实现 4.模板与泛型编程 5.定制new和delete 6.其他 Effective C++ 1.类/结构体 1.把C++看成一 ...

  8. effective c++条款11扩展——关于拷贝构造函数和赋值运算符

    effective c++条款11扩展--关于拷贝构造函数和赋值运算符 作者:冯明德 重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符. 以下讨论中将用到的例 ...

  9. Effective C++条款09:绝不在构造和析构过程中调用virtual函数

    Effective C++条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruc ...

  10. effective c++条款44 将与参数无关的代码抽离templates

    effective c++条款44 将与参数无关的代码抽离templates 首先了解这个条款的含义:使用template可能导致代码膨胀,二进制码会带着重复(或者几乎重复)的代码.数据,或两者.其结 ...

最新文章

  1. R使用深度学习LSTM构建时间序列预测模型
  2. linux脚本获取当前用户,bash shell 获取当前正在执行脚本的绝对路径
  3. 第二次作业— —结对项目
  4. 谁偷走了程序员的时间??
  5. python程序占用内存高_如何优化Python占用的内存,面试必学
  6. 正则查找倒数第二个符合条件的字符串_EXCEL正则表达式的基础语法
  7. java 读 jar外文件_读取Jar包外面的配置文件
  8. linux查看log软件
  9. eclipse使用git合并_IntelliJ IDEA完整使用教学:从小白到大牛的必经之路!
  10. displayTag
  11. 安装ahci驱动sata
  12. 计算机软件著作权查看,计算机软件著作权查询方式有哪些
  13. FIR窗函数和IIR模拟、数字滤波器的MATLAB实现
  14. axure中备注线_axure 备注怎么写
  15. 解决微信图片不可引用的问题
  16. [Java基础]JAVA的SWITCH语句(String)
  17. java同时访问多个接口
  18. html5定义一个变量,JavaScript 变量
  19. Win7Codecs+设置程序中英文对照
  20. 精彩的javascript代码(包括表单校验等等)

热门文章

  1. Linux 下 10 个最“危险”的命令,开发者应该了解
  2. 【收集】前端技能知识图谱
  3. 数据库---查询(详细)
  4. facebook有哪些信息_关于Facebook表情表情符号的所有信息
  5. 控制台ui_设计下一代控制台UI
  6. Android通过透明度设置背景变暗
  7. HDU1561:The more, The Better——题解
  8. Xcode 8带来的新特性和坑
  9. [Windows编程] 通过GetModuleHandleEx 得到函数调用者所在的DLL/EXE 原创陈本峰2009-02
  10. repomd.xml错误14 not found