首页 >后端开发 >C++ >Consteval 函数能否使依赖于函数参数的模板参数中的函数参数合法化?

Consteval 函数能否使依赖于函数参数的模板参数中的函数参数合法化?

Patricia Arquette
Patricia Arquette原创
2024-10-24 03:53:30492浏览

Can Consteval Functions Legalize Function Parameters in Template Parameters Dependent on Function Arguments?

Consteval 函数:依赖于函数参数的模板参数的限制

在 C 17 中,定义依赖于函数的模板参数的 constexpr 函数禁止争论。虽然 C 20 中的 consteval 函数承诺强制执行编译时求值,但这是否意味着此类代码现在可以合法化?

问题:

consteval int foo(int i) { 返回 std::integral_constant::value; }。此代码在 C 20 中有效吗?

答案:

否。

解释:

尽管引入了 consteval 函数,但基本原则仍然是非模板函数定义具有单点类型解析。拟议代码的合法化将对单一定义规则(ODR)产生影响。此外,C 20 论文明确指出,由于潜在的类型不匹配,函数参数不会被视为核心常量表达式。

因此,函数参数不能直接用作模板参数依赖项中的常量表达式,甚至在 consteval 函数上下文中。

以上是Consteval 函数能否使依赖于函数参数的模板参数中的函数参数合法化?的详细内容。更多信息请关注PHP中文网其他相关文章!

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