美文网首页
const 的使用(Use of const)

const 的使用(Use of const)

作者: 吃柠檬的鸮 | 来源:发表于2019-06-03 22:05 被阅读0次

    强烈建议在任何可以使用的情况下都要使用 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)

          本文链接:https://www.haomeiwen.com/subject/waghxctx.html