const在C++中的优点?

cas*_*der 13 c++ const

对于不熟悉的人来说,C++(和C)中const的优点是什么?

DWr*_*ght 10

Const对于传递给函数的指针或引用特别有用 - 它是一种可立即理解的"API契约",其功能不会改变传递的对象.

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


Gre*_*ill 9

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

void f(Foo &foo, const Bar &bar) { ... }
Run Code Online (Sandbox Code Playgroud)

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

所有上述保障都可以绕过使用const_cast,这就是为什么这种演员被认为是"危险的"(或者至少是可疑的).


Mar*_*som 6

看起来非常明显 - 它可以防止您修改不应修改的内容.

编辑:有关更多指导,请始终关注Herb Sutter.


Kei*_*las 5

我不太相信const的"安全"方面(有利有弊)....但是,它允许的是某些语法,你不能没有const

void blah(std::string& x)
{}
Run Code Online (Sandbox Code Playgroud)

只能取一个std :: string对象...但是如果你声明它为const: -

void blah(const std::string& x) {}
Run Code Online (Sandbox Code Playgroud)

你现在可以做

blah("hello");
Run Code Online (Sandbox Code Playgroud)

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


Pre*_*mbo 5

此外,通过使用 const,您可以声明使用变量或参数的意图。这是一个很好的编程实践(“ C/C++ 编码风格和标准”,第 2.3 项)。

另外,通过避免使用 #define 来定义常量并使用 const,可以提高代码的类型安全性。 C++ 编程实践指南- 第 2.1 项