【发布时间】:2009-01-22 02:53:36
【问题描述】:
const 在 C++(和 C)中对初学者有什么好处?
【问题讨论】:
-
我认为这是stackoverflow.com/questions/455518/…的完全相同的副本
-
您可能会发现这很有用StackOverFlow 455537
const 在 C++(和 C)中对初学者有什么好处?
【问题讨论】:
Const 对于传递给函数的指针或引用特别有用——它是一种立即可以理解的“API 契约”,函数不会更改传递的对象。
另请参阅:http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.4
【讨论】:
当在函数中用作 const 引用时,它让 调用者 知道传入的东西不会被修改。
void f(Foo &foo, const Bar &bar) { ... }
在这种情况下,调用者会知道foo 可能会被修改,但bar 不会。编译器将在编译f() 的主体时强制执行此操作,因此bar 永远不会被修改,也永远不会传递给可能修改它的另一个函数。
使用const_cast 可以绕过上述所有保护措施,这就是为什么这样的演员被认为是“危险的”(或至少是可疑的)。
【讨论】:
看起来很明显 - 它可以防止你修改不应该修改的东西。
编辑:如需更多指导,请随时关注Herb Sutter。
【讨论】:
我不太相信 const 的“安全”方面(有利也有弊)....但是,它允许的是某些语法,如果没有 const,您将无法做到
void blah(std::string& x)
{}
只能采用 std::string 对象...但是,如果您将其声明为 const :-
void blah(const std::string& x) {}
你现在可以做
blah("hello");
它将调用适当的构造函数来生成一个 std::string
【讨论】:
此外,通过使用 const,您打算声明使用变量或参数。这是一个很好的编程习惯(“C/C++ Coding Style & Standards”,第 2.3 条)。
此外,通过避免使用#define 来定义常量和使用 const,您可以提高代码的类型安全性。 C++ Programming Practice Guidelines - 项目 2.1
【讨论】:
const 的契约方面对于编译器的优化器也很重要。使用某些 const 声明,涉及循环不变量的优化更容易被优化器发现。这就是 const_cast 真正危险的原因。
【讨论】: