C++中const的优点?[重复]

xqkwcwgp  于 2023-01-28  发布在  其他
关注(0)|答案(6)|浏览(126)
    • 此问题在此处已有答案**:

14年前就关闭了。
社区在2天前审查了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
对于门外汉来说,在C++(和C)中使用const有什么好处?

k3fezbri

k3fezbri1#

Const对于传递给函数的指针或引用特别有用--它是一种易于理解的"API契约",函数不会更改传递的对象。
另见:www.example.comhttp://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.4

t2a7ltrp

t2a7ltrp2#

当在函数中用作常量引用时,它让 caller 知道传入的内容不会被修改。

void f(Foo &foo, const Bar &bar) { ... }

在这种情况下,调用者会知道foo可能被修改,但bar不会,编译器会在编译f()的主体时强制执行这一点,这样bar就不会被修改,也不会传递给其他可能修改它的函数。
使用const_cast可以绕过上述所有安全措施,这就是为什么这样的强制转换被认为是“危险的”(或者至少是可疑的)。

h6my8fg2

h6my8fg23#

看起来很明显-它阻止你修改不应该修改的东西。
编辑:要获得更多指导,请始终查看Herb Sutter

wnrlj8wa

wnrlj8wa4#

我对const的“安全性”方面并不十分确信(有优点也有缺点)......但是,它确实允许使用某些语法,而没有const就无法使用这些语法

void blah(std::string& x)
{}

只能接受std::string对象...但是如果声明它为const:-

void blah(const std::string& x) {}

你现在可以

blah("hello");

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

rhfm7lfc

rhfm7lfc5#

另外,通过使用const,你可以声明你使用变量或参数的 * 意图 *,这是一个很好的编程实践(“C/C++ Coding Style & Standards“,第2.3条)。
此外,通过避免使用#define定义常量和使用const,可以提高代码的类型安全性。C++ Programming Practice Guidelines- item 2.1

jei2mxaa

jei2mxaa6#

const的契约方面对于编译器的优化器也很重要。使用某些const声明,优化器更容易发现涉及循环不变量的优化。这就是为什么const_cast非常危险。

相关问题