c++ - 不带参数的 constexpr 函数

标签 c++ c++11 constexpr

我对这段代码感到困惑:

constexpr int f(bool b) {
  return b ? throw 0 : 0; }
constexpr int f() { return f(true); }

直接来自 c++ draft . 我坚持的观点是,为什么标准将没有参数的 constexpr 函数定义为格式错误(在同一链接中说明)。 谁能澄清一下?

最佳答案

关键是“如果不存在任何参数值,那么函数或构造函数的调用可能是核心常量表达式的评估子表达式”。这与不带参数的函数 f() 无关;这是关于这样一个事实,即您没有可以给它的参数集来使它返回可用的值 - 它总是调用 f(true),这会引发异常。

重申一下:没有参数的 constexpr 函数当然可以是良构的。但对于给定的示例,它不是。

另外值得注意的是“不需要诊断”。这意味着编译器无论如何都可以自由接受该构造。事实上,GCC 毫无怨言地编译了您问题中的示例。

关于c++ - 不带参数的 constexpr 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40817485/

相关文章:

c++ - 我怎样才能让 GCC 在 ROM 中放置一个 C++ constexpr?

c++ - 在 C++17 中修改 constexpr 函数中的全局变量

c# - C# 的 IVR 编程库

c++ - 为什么 setprecision( ) 在一个数字中给我两个单独的小数点?

c++ - 要求派生类提供成员函数模板

c++ - 在 C++ 中将映射指针更改为值时丢弃限定符错误

c++ - constexpr 模板参数怪异

c++ - nlohmann json 从文件中读取

c++ - 将条件定义与可变参数模板一起使用

c++ - 编译时的模板和 constexpr 推导取决于编译器和优化标志