没有参数的constexpr函数

时间:2016-11-26 10:43:50

标签: c++ c++11 constexpr

我对这个片段感到困惑:

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

直接来自c++ draft。 我坚持的观点是为什么标准定义为不带参数的constexpr函数的情况(在同一链接中说明)。 有人可以澄清吗?

1 个答案:

答案 0 :(得分:8)

如果不存在参数值,则键为“,以便调用函数或构造函数可以是核心常量表达式”的计算子表达式。它不是关于函数f()没有参数;它是关于这样一个事实:你可以给它一些参数,它会使它返回一个可用的值 - 它总是调用f(true),这会抛出异常。

重新迭代:没有参数的constexpr函数当然可以很好地形成。但是对于给定的例子,它不是。

另外值得注意的是“不需要诊断”。这意味着编译器无论如何都可以自由地接受该构造。实际上,GCC在没有抱怨的情况下编译了你问题中的例子。