首页  >  文章  >  后端开发  >  为什么我不能在 `constexpr` 函数中使用函数参数作为常量表达式?

为什么我不能在 `constexpr` 函数中使用函数参数作为常量表达式?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-22 00:28:14473浏览

Why Can't I Use a Function Parameter in a `constexpr` Function as a Constant Expression?

不能在常量表达式中使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn