对于不熟悉的人来说,{+ 3}在C ++(和C)中有什么优势?
答案 0 :(得分:10)
Const对于传递给函数的指针或引用特别有用 - 它是一种可以立即理解的“API契约”,其功能不会改变传递的对象。
另请参阅:http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.4
答案 1 :(得分:8)
当在函数中用作const引用时,它让调用者知道传入的东西不会被修改。
void f(Foo &foo, const Bar &bar) { ... }
在这种情况下,来电者会知道可能会修改foo
,但bar
不会。编译器将在编译f()
的主体时强制执行此操作,以便bar
永远不会被修改,并且永远不会传递给可能修改它的另一个函数。
所有上述保护措施都可以使用const_cast
绕过,这就是为什么这种演员被认为是“危险的”(或者至少是可疑的)。
答案 2 :(得分:6)
看起来非常明显 - 它可以防止您修改不应修改的内容。
修改:要获得更多指导,请始终查看Herb Sutter。
答案 3 :(得分:5)
我不太相信const的“安全”方面(有利有弊)....但是,它允许的是某些语法,你不能没有const
void blah(std::string& x)
{}
只能获取一个std :: string对象...但是如果你声明它为const: -
void blah(const std::string& x) {}
你现在可以做到
blah("hello");
将调用适当的构造函数来生成std :: string
答案 4 :(得分:4)
此外,通过使用const,您可以声明意图以使用变量或参数。这是一个很好的编程习惯(“C/C++ Coding Style & Standards”,第2.3项)。
另外,通过避免使用#define来定义常量和使用const,可以提高代码的类型安全性。 C++ Programming Practice Guidelines - 第2.1项
答案 5 :(得分:-1)
const的契约方面对编译器的优化器也很重要。对于某些const声明,优化器更容易发现涉及循环不变量的优化。这就是const_cast真正危险的原因。