gpt4 book ai didi

c++ - consteval 函数是否允许依赖于函数参数的模板参数?

转载 作者:IT老高 更新时间:2023-10-28 13:58:57 25 4
gpt4 key购买 nike

在 C++17 中,这段代码是非法的:

constexpr int foo(int i) {
return std::integral_constant<int, i>::value;
}

那是因为即使 foo 可以在编译时求值,编译器仍然需要在运行时生成指令来执行它,因此无法进行模板实例化。

在 C++20 中,我们将有 consteval 函数,这些函数需要在编译时进行评估,因此应该删除运行时约束。这是否意味着此代码将是合法的?

consteval int foo(int i) {
return std::integral_constant<int, i>::value;
}

最佳答案

没有。

无论论文会带来什么变化,这都是很小的at this point ,它不能改变非模板函数定义只输入一次的事实。此外,如果您提出的代码是合法的,我们大概可以找到一种方法来声明 std::integral_constant<int, i> 类型的变量。 ,这在 ODR 方面感觉非常令人望而却步。

该论文还指出,在其中一个示例中,参数不应被视为核心常量表达式;

consteval int sqrsqr(int n) {
return sqr(sqr(n)); // Not a constant-expression at this point,
} // but that's okay.

简而言之,由于可能存在类型差异,函数参数永远不会是常量表达式。

关于c++ - consteval 函数是否允许依赖于函数参数的模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56130792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com