• Effective C++ 条款3 关于const的一切


    const与*

    符号左侧为所指对象的语义,符号右侧为指针自身语义

    const与iterator

    const iterator(是T* const) != const_iterator
    详细原因应参考c++编译和c++设计与演化

    const避免将==写成=

    运算符的重载函数返回const对象可以避免运算结果被赋值,该赋值可能是由于错误将==写为=导致的

    两种const定义

    1. bitwise const
      不更改成员的任何一个bit,编译器直接检查bit的赋值动作,就可以判断是否违反const。这是C++对const的定义。
    2. logical const
      为什么会出现这种定义?因为某些场景中bitwise const定义不一定能产生正确结果:如果成员函数只是更改了指针所指物(并非修改指向,即修改指针),而当前对象只包含指针,则能通过bitwise const测试。
      因此可以使用mutable修饰符来去掉非static成员变量的bitwise const约束。

    const成员函数

    较为细节,建议看书

    1. 两个成员函数只是const/non-const,可以重载
    2. 如果non-const成员函数返回成员变量,函数声明中返回类型为非引用类型,则不能对返回值进行修改。原因应该是该返回值是右值(感觉这个错误还是比较容易避免,因为在写这个函数时就会思考,返回的内容如果后续被修改,是否具有可被修改的基础?)
    3. 使用non const成员函数调用重载的const成员函数。实现方法是先将对象转型到const对象,再调用const的成员函数,并将结果转型为non const。具体代码见书
  • 相关阅读:
    换零钞
    空心菱形
    生成回文数
    机器人数目
    胡同门牌号
    七星填数
    阶乘位数
    打印数字
    平方末尾
    数位和
  • 原文地址:https://www.cnblogs.com/ijpq/p/16607488.html
Copyright © 2020-2023  润新知