您的位置:首页 > 编程语言 > C语言/C++

Effective C++ Item3

2015-09-06 14:25 253 查看
只要可能就用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 的称呼,正文中的称呼改了,此处却没有改。其实此处还是作者新加的部分,却使用了旧的术语,怪!——译者注)

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: