const在C ++中的优点?

时间:2009-01-22 02:53:37

标签: c++ const

对于不熟悉的人来说,{+ 3}在C ++(和C)中有什么优势?

6 个答案:

答案 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真正危险的原因。