【问题标题】:Advantages of const in C++? [duplicate]C++ 中 const 的优点? [复制]
【发布时间】:2009-01-22 02:53:36
【问题描述】:

const 在 C++(和 C)中对初学者有什么好处?

【问题讨论】:

标签: c++ constants


【解决方案1】:

Const 对于传递给函数的指针或引用特别有用——它是一种立即可以理解的“API 契约”,函数不会更改传递的对象。

另请参阅:http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.4

【讨论】:

    【解决方案2】:

    当在函数中用作 const 引用时,它让 调用者 知道传入的东西不会被修改。

    void f(Foo &foo, const Bar &bar) { ... }
    

    在这种情况下,调用者会知道foo 可能会被修改,但bar 不会。编译器将在编译f() 的主体时强制执行此操作,因此bar 永远不会被修改,也永远不会传递给可能修改它的另一个函数。

    使用const_cast 可以绕过上述所有保护措施,这就是为什么这样的演员被认为是“危险的”(或至少是可疑的)。

    【讨论】:

      【解决方案3】:

      看起来很明显 - 它可以防止你修改不应该修改的东西。

      编辑:如需更多指导,请随时关注Herb Sutter

      【讨论】:

      • ...偶然。 :-P const_cast 可以轻松覆盖。
      • 我正想说同样的话。
      • 虽然你应该担心未定义的行为,但如果你以错误的方式使用 const_cast...
      【解决方案4】:

      我不太相信 const 的“安全”方面(有利也有弊)....但是,它允许的是某些语法,如果没有 const,您将无法做到

      void blah(std::string& x)
      {}
      

      只能采用 std::string 对象...但是,如果您将其声明为 const :-

      void blah(const std::string& x) {}
      

      你现在可以做

      blah("hello");
      

      它将调用适当的构造函数来生成一个 std::string

      【讨论】:

        【解决方案5】:

        此外,通过使用 const,您打算声明使用变量或参数。这是一个很好的编程习惯(“C/C++ Coding Style & Standards”,第 2.3 条)。

        此外,通过避免使用#define 来定义常量和使用 const,您可以提高代码的类型安全性。 C++ Programming Practice Guidelines - 项目 2.1

        【讨论】:

          【解决方案6】:

          const 的契约方面对于编译器的优化器也很重要。使用某些 const 声明,涉及循环不变量的优化更容易被优化器发现。这就是 const_cast 真正危险的原因。

          【讨论】:

          • const_cast 和 mutable 的存在显式阻止编译器基于 const 限定符进行优化。
          猜你喜欢
          • 2010-10-25
          • 2014-05-12
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 1970-01-01
          • 2011-04-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多