我对这段代码感到困惑:
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/