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

标签 c++ c++11

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

相关文章:

c++ - 使用模板进行序列数组初始化

c++ - Freetype 字形在加载到 openGL 时换行

c++ - 算术表达式开头的类型转换适用于什么?

c++ - 使用 VBO 的 OpenGL 绘图

c++ - 如何在需要提及需要循环声明的其他类的类中初始化变量?

multithreading - 使用类成员函数时std::thread构造函数按引用传递

c++ - 如何检测函数是否存在?

c++ - 有没有办法让 OpenCL C++ 绑定(bind)对所有错误都抛出异常?

python - 使用 Python C API 时奇怪的内存行为

c++ - 指针在字符串C++中的输出位置