const 的使用(Use of const)

强烈建议在任何可以使用的情况下都要使用 const

定义:在声明的变量或参数前加上关键字 const 用于指明变量值不可修改;为类中的函数加上 const 限定表明该函数不会修改类成员变量的状态。

const int foo;

class Foo {
  int Bar (chat c) const;
};

优点:人们更容易理解变量是如何使用的,编辑器可以更好地进行类型检测、更好地生成代码。人们对编写正确的代码更加自信,因为他们知道所调用的函数被限定了能或不能修改变量值。即使是在无锁的多线程编程中,人们也知道什么样的函数是安全的。

缺点:如果你向一个函数传入 const 变量,函数原型中也必须是 const的(否则变量需要 const_cast 类型转换),在调用库函数时这尤其是个麻烦。

结论:const 变量、数据成员、函数和参数为编译时类型检测增加了一层保障,更好的尽早发现错误。因此,我们强烈建议在任何可以使用的情况下使用 const

  1. 如果函数不会修改传入的引用或指针类型的参数,这样的参数应该为 const
  2. 尽可能将函数声明为 const,访问函数应该总是 const,其他函数如果不会修改任何数据成员也应该是 const,不要调用非 const 函数,不要返回对数据成员的非 const 指针或引用;
  3. 如果数据成员在对象构造之后不再改变,可将其定义为 const
    然而,也不要对 const 过度使用,像 const int * const * const x;就有些过了,即便这样写精确描述了 x,其实写成 const int** x 就可以了。
    关键字 mutable 可以使用,但是在多线程中是不安全的,使用时首先要考虑线程安全。

关于 const 位置:
有人喜欢 int const *foo 形式不喜欢 const int* foo,他们认为前者更加一致因此可读性更好:遵循了 const 总位于其描述的对象(int)之后的原则。但是,一致性原则不适用于此,“ 不要过度使用 ” 的权威抵消了一致性使用。将 const 放在前面才更易读,因为在自然语言中形容词(const)是在名词(int)之前的。
这是说,提倡 const 在前,并不是要求,但要兼顾代码的一致性!

你可能感兴趣的:(const 的使用(Use of const))