C++ 不带参数的constexpr函数
我对这个片段感到困惑:C++ 不带参数的constexpr函数,c++,c++11,constexpr,C++,C++11,Constexpr,我对这个片段感到困惑: constexpr int f(bool b) { return b ? throw 0 : 0; } constexpr int f() { return f(true); } 直接从。 我感到困惑的一点是,为什么标准将没有参数的constexpr函数的情况定义为格式错误(在同一链接中说明)。 有人可以澄清一下吗?关键是“如果不存在参数值,那么函数或构造函数的调用可能是核心常量表达式的求值子表达式”。它不是关于函数f()不带参数;这是因为没有一组参数可以让它返回一
constexpr int f(bool b) {
return b ? throw 0 : 0; }
constexpr int f() { return f(true); }
直接从。
我感到困惑的一点是,为什么标准将没有参数的constexpr
函数的情况定义为格式错误(在同一链接中说明)。
有人可以澄清一下吗?关键是“如果不存在参数值,那么函数或构造函数的调用可能是核心常量表达式的求值子表达式”。它不是关于函数f()
不带参数;这是因为没有一组参数可以让它返回一个可用值——它总是调用f(true)
,这会引发异常
重新迭代:一个没有参数的constexpr
函数肯定是格式良好的。但就给定的例子而言,情况并非如此
同样值得注意的是“不需要诊断”。这意味着编译器可以自由地接受构造。事实上,GCC毫无怨言地编译了您问题中的示例