fed*_*ino 2 c++ constexpr c++11
我对这个片段感到困惑:
constexpr int f(bool b) {
return b ? throw 0 : 0; }
constexpr int f() { return f(true); }
Run Code Online (Sandbox Code Playgroud)
直接来自c ++草案.我所强调的一点是,为什么标准将constexpr没有参数的函数定义为格式错误(在同一链接中说明).愿有人澄清吗?
关键是" 如果不存在参数值,则函数或构造函数的调用可以是核心常量表达式的计算子表达式 ".这不是f()没有参数的功能; 它是关于这样一个事实,即没有一组你可以给它的参数会使它返回一个可用的值 - 它总是调用f(true),抛出一个异常.
重新迭代:constexpr没有参数的函数当然可以很好地形成.但是对于给定的例子,它不是.
另外值得注意的是"不需要诊断".这意味着编译器无论如何都可以自由地接受该构造.实际上,GCC在没有抱怨的情况下编译了你问题中的例子.