Consteval 函数和模板参数依赖于函数参数
在 C 17 中,模板参数不能依赖于函数参数,因为编译器仍然需要为非 constexpr 函数生成运行时指令,即使它们是在编译时求值的。
C 20 Consteval 函数
C 20 引入了 consteval 函数,它必须在编译时评估,消除运行时约束。然而,问题仍然存在:这是否意味着模板参数现在可以依赖于函数参数?
不允许依赖模板参数
尽管引入了 consteval 函数,答案是否定的。该论文承认参数不应被视为核心常量表达式。这是由于潜在的类型差异造成的,如论文中的示例所示:
consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.
因此,函数参数永远不会被视为常量表达式,从而防止模板参数依赖于它们。
以上是模板参数可以依赖于 C 20 Consteval 函数中的函数参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!