我正在阅读关于 constexpr
here :
The
constexpr
specifier declares that it is possible to evaluate the value of the function or variable at compile time.
当我第一次读到这句话时,它对我来说非常有道理。然而,最近我遇到了一些完全让我失望的代码。我在下面重建了一个简单的例子:
#include <iostream>
void MysteryFunction(int *p);
constexpr int PlusOne(int input) {
return input + 1;
}
int main() {
int i = 0;
MysteryFunction(&i);
std::cout << PlusOne(i) << std::endl;
return 0;
}
看这段代码,我无法说出 PlusOne(i)
的结果应该是什么,但它确实编译了! (当然链接会失败,但是 g++ -std=c++11 -c
成功无误。)
“可能在编译时评估函数的值”的正确解释是什么?
最佳答案
constexpr
函数可以在常量表达式中调用,前提是满足常量表达式求值的其他要求。它也可以在不是常量表达式的表达式中调用,在这种情况下,它的行为就像没有用 constexpr
声明一样。正如您问题中的代码所示,调用 constexpr
函数的结果不是自动常量表达式。
关于C++ constexpr - 可以在编译时计算值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263790/