【发布时间】:2018-10-28 22:44:12
【问题描述】:
刚刚了解了 constexpr 函数并前往 godbolt 了解编译器如何优化代码并发现编译器的行为完全不同。
有如下代码:
constexpr int square(int num) {
return num * num;
}
int main() {
int a = square(2);
}
g++ 和 icc 编译器计算函数结果并将其分配给一个变量(如我所料),但 msvc 和 clang 调用函数。
要使用优化,我们应该做额外的步骤:
constexpr int square(int num) {
return num * num;
}
int main() {
constexpr int c = square(2);
int a = c;
}
这种行为有什么合理的解释吗?
godbolt 示例链接:https://godbolt.org/z/ez7luu
【问题讨论】:
标签: c++ g++ c++14 constexpr clang++