【发布时间】:2014-08-20 05:26:02
【问题描述】:
现代编译器是否会优化像if(CONSTANT) { ... } 这样的代码,其中CONSTANT 是文字、模板参数、const 变量或constexpr 变量?他们是删除整个if(0) { ... } 表达式还是“丢弃”if(1) { ... } 中的if(1) 部分?
【问题讨论】:
-
使用
if(constant)检查程序集输出并检查没有它的输出。据我所知,如果 CONSTANT 确实是一个常量,很多编译器会在优化级别设置得足够高的情况下进行这种类型的优化。 -
成为
const变量并不一定意味着编译器知道该值。 -
@quetzalcoatl 谢谢。接受的 answer 很有帮助。但请注意,该问题中唯一的“问题部分”是“编译器如何优化声明为 const 的方法与未声明的方法”。我看不出我的问题如何与那个问题重复。
-
cubuspl42 - 我同意这不是最好的“重复”参考,但仍然比more-of-a-duplicate 有用得多。奇怪的是,我找不到更好的(不过,我知道它们存在,这个问题很常见),所以我链接了提供最有用信息的那个。
标签: c++ c if-statement optimization constants