Effective C++ Item3

只要可能就用const

1.const 指针

T* const p   p 是const *p非const   p = p++ //ok *p = xx //error

const T* p   p非const  *p是const  p = p++ //error    *p=xx //ok

注意:这两种类型作为函数参数传递没有区别

2.const 成员函数

返回类型为const 引用或指针是给const对象调用

mutable修饰成员变量在const对象中允许被修改


class TextBlock {
public:


  ...


  const char& operator[](std::size_t position) const     // same as before
  {
    ...
    ...
    ...
    return text[position];
  }


  char& operator[](std::size_t position)         // now just calls const op[]
  {
    return
     
const_cast
<char&>(                         // cast away const on
                                                 // op[]'s return type;
       
static_cast
<const TextBlock&>(*this)     // add const to *this's type;
          [position]                             // call const version of op[]
      );
  }


...


};


· 将某些东西声明为 const 有助于编译器发现使用错误。const 能被用于任何 scope(范围)中的 object(对象),用于 function parameters(函数参数)和 return types(返回类型),用于整个 member functions(成员函数)。

· 编译器坚持 bitwise constness(二进制位常量性),但是你应该用 conceptual constness(概念上的常量性)来编程。(此处原文有误,conceptual constness为作者在本书第二版中对 logical constness 的称呼,正文中的称呼改了,此处却没有改。其实此处还是作者新加的部分,却使用了旧的术语,怪!——译者注)

· 当 const 和 non-const member functions(成员函数)具有本质上相同的实现的时候,使用 non-const 版本调用 const 版本可以避免 code duplication(代码重复)



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值