Consteval 函数可以启用依赖于函数参数的模板参数吗?
在 C 17 中,像下面的代码片段这样的 constexpr 函数是无效的:
<code class="cpp">constexpr int foo(int i) { return std::integral_constant<int, i>::value; }</code>
尽管 foo 在编译时求值,但编译器要求它在运行时可执行,这阻碍了模板实例化。
C 20 引入了 consteval 函数,强制编译时求值。人们可能想知道这是否允许使用如下代码:
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
答案是否。
论文的潜在更改不能改变非模板的单一类型函数定义。此外,如果这段代码有效,它将开启声明 std::integral_constant
论文还通过一个例子说明了参数不会被视为核心常量表达式:
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, but that's okay. }</code>
本质上,函数参数总是会因为潜在的类型不一致而缺乏常量表达式状态。
以上是Consteval 函数可以允许模板参数依赖于函数参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!