不能在常量表达式中使用 constexpr 函数的函数参数
提供的代码片段显示了 constexpr 函数 make_const 和函数t1 尝试将 make_const 与非常量表达式一起使用。这会引发错误,因为 t1 中的 i 不是常量表达式。
constexpr 函数,当给定常量参数时,可以在编译时求值。但是,如果将非 constexpr 参数传递给 constexpr 函数,它不会使该参数成为常量表达式。
在下面的代码中,t1 是 constexpr 函数,但 t1 中的 make_const(i) 是不是常量表达式,因为 i 不是常量:
constexpr int t1(const int i) { return make_const(i); }
更新的代码显示 t1 可以声明为 constexpr 且返回 make_const 的结果:
constexpr int t1(const int i) { return make_const(i); }
但是,下面的代码仍然会导致错误,因为 do_something
template<int i> constexpr bool do_something(){ return i; } constexpr int t1(const int i) { return do_something<make_const(i)>(); }
总而言之,constexpr 函数参数必须是常量表达式。如果传递非常量参数,它不会成为 constexpr 函数内的常量表达式。
以上是为什么我不能在 `constexpr` 函数中使用函数参数作为常量表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!