我对这个片段感到困惑:
constexpr int f(bool b) {
return b ? throw 0 : 0; }
constexpr int f() { return f(true); }
直接来自c++ draft。
我坚持的观点是为什么标准定义为不带参数的constexpr
函数的情况(在同一链接中说明)。
有人可以澄清吗?
答案 0 :(得分:8)
如果不存在参数值,则键为“,以便调用函数或构造函数可以是核心常量表达式”的计算子表达式。它不是关于函数f()
没有参数;它是关于这样一个事实:你可以给它一些参数,它会使它返回一个可用的值 - 它总是调用f(true)
,这会抛出异常。
重新迭代:没有参数的constexpr
函数当然可以很好地形成。但是对于给定的例子,它不是。
另外值得注意的是“不需要诊断”。这意味着编译器无论如何都可以自由地接受该构造。实际上,GCC在没有抱怨的情况下编译了你问题中的例子。