gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:42:43 26 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/59544519/

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