DWr*_*ght 10
Const对于传递给函数的指针或引用特别有用 - 它是一种可立即理解的"API契约",其功能不会改变传递的对象.
另见:http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.4
当在函数中用作const引用时,它使调用者知道传入的东西不会被修改.
void f(Foo &foo, const Bar &bar) { ... }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,调用者将知道foo
可能被修改,但bar
不会.编译器在编译主体时会强制执行此操作f()
,因此bar
永远不会修改它,也不会传递给可能修改它的另一个函数.
所有上述保障都可以绕过使用const_cast
,这就是为什么这种演员被认为是"危险的"(或者至少是可疑的).
我不太相信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
此外,通过使用 const,您可以声明使用变量或参数的意图。这是一个很好的编程实践(“ C/C++ 编码风格和标准”,第 2.3 项)。
另外,通过避免使用 #define 来定义常量并使用 const,可以提高代码的类型安全性。 C++ 编程实践指南- 第 2.1 项