对于外行来说,C++(和 C)中的const有什么优势?
6 回答
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++ 编码风格和标准”,第 2.3 条)。
此外,通过避免使用#define 来定义常量并使用 const,您可以提高代码的类型安全性。 C++ 编程实践指南- 项目 2.1
const 的契约方面对于编译器的优化器也很重要。使用某些 const 声明,涉及循环不变量的优化更容易被优化器发现。这就是 const_cast 真正危险的原因。