c++ - "const"声明有助于编译器 (GCC) 生成更快的代码吗?

标签 c++ c performance gcc g++

<分区>

const 声明是否有助于编译器 (GCC) 生成更快的代码,还是它们仅对可读性和正确性有用?

Zed Shaw 认为 const 在 C/C++ 中没有用或被过度使用:

Next is all the bizarre fascination with const. For some odd reason C++ loves to make you slap const on every part of a declaration, and yet I get the same end result as C: a function is called. (...)

(来自:http://librelist.com/browser//mongrel2/2010/7/15/c-verses-c++/#770d94bcfc6ddf1d8510199996b607dd)

最佳答案

是的。这是一个具体的例子。 const 可以通过 const& 而不是按值传递参数(这可能需要昂贵的拷贝)。重要的是要意识到 pass-by-const& 的替代方法是 not pass-by-& 因为后者不允许临时对象约束。因此,例如,这段代码:

auto result = foo{1} + foo{2} + foo{3};

可能会调用 foo operator +(foo const&, foo const&) 但它可能不会调用 foo operator +(foo&, foo&)

这样,const 有助于避免复制。

但一般来说,const 是一种确保正确性 的工具,而不是帮助优化。

无论哪种方式,Zed Shaw 都不知道他在说什么。顺便说一句,他的其他咆哮同样被误导了。

关于c++ - "const"声明有助于编译器 (GCC) 生成更快的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693136/

相关文章:

performance - 如何计算算法的加密和解密时间复杂度?

c++ - 如何在不使用 std::async 的情况下使用 std::future?

c - 第一次 printf 之后它什么也不做(成功编译)

performance - 与选民的 symfony 表演

c - 使用 AES 作为具有真正随机种子的可移植 RNG?

c - mmap 的最小尺寸

javascript - IE8/Javascript 冲突?开发中的 IE8 跨站点卡住 - 包括 Javascript 列表

c++ - 涉及指针成员变量和多态性的很奇葩的问题

c++ - 为什么指针数组会在函数完成时自行初始化?

c++ - 如何在 C++ 中使用 "int promptYN(string reply)"结束刽子手游戏