我正在阅读关于
constexpr
的文章,可以在这里看到更多相关内容:
起初我完全理解这句话的意思。然而,最近我遇到了一些完全让我不知所措的代码。下面是一个简单的示例:
constexpr
指定符声明函数或变量的值可以在编译时计算。
#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
的参数传递给PlusOne
函数,编译器将无法在编译时评估它,它将仅成为一个普通的运行时函数。 - Some programmer dudeconstexpr
е…ій”®еӯ—иЎЁзӨәеҮҪж•°жҲ–еҸҳйҮҸзҡ„еҖјеҸҜд»ҘеңЁзј–иҜ‘ж—¶иў«и®Ўз®—еҮәжқҘпјҲдҪҶдёҚдёҖе®ҡдјҡиў«еңЁзј–иҜ‘ж—¶и®Ўз®—пјүгҖӮ - Rakete1111