gpt4 book ai didi

C++ constexpr - 可以在编译时计算值吗?

转载 作者:可可西里 更新时间:2023-11-01 18:41:35 26 4
gpt4 key购买 nike

我正在阅读关于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com