我正在阅读 Bjarne 的A Tour of C++ ,他在第1.6 节 Constants中有这个例子。
constexpr int dmv = 17; // dmv is a named constant
int var = 17; // var is not a constant
const double sqv = sqrt(var); // sqv is a named constant, possibly computed at run time
Run Code Online (Sandbox Code Playgroud)
我的问题与他对最后一行的评论有关
...可能在运行时计算
从代码来看,值var
,数字文字17
不会在代码中的任何地方改变。为什么编译器不在编译时评估它?
我在查看时看到了这个问题的答案const
,它用于语义,对于程序员而不是编译器来说更有意义。但我的主要问题是:
编译器可以不对此进行优化吗?如果不是,是因为要求编译器进行优化的要求太多了吗?
编辑:我想优化的编译器部分是计算,sqv
因为var
程序中的任何地方都没有改变。
编译器不能优化这个吗
它可能能够做到这一点,但并不要求能够做到这一点(直到 C++26 已经std::sqrt
完成constexpr
)。
即使在 C++11 模式下,也g++ 13.2
可以clang++ 16
优化此程序
#include <cmath>
int main() {
constexpr int dmv = 17; // dmv is a named constant
int var = 17; // var is not a constant
const double sqv = std::sqrt(var);
return static_cast<int>(sqv);
}
Run Code Online (Sandbox Code Playgroud)
进入这个大会
main:
mov eax, 4
ret
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
124 次 |
最近记录: |