gpt4 book ai didi

c++ - std::is_constant_evaluate 行为

转载 作者:IT老高 更新时间:2023-10-28 22:26:42 27 4
gpt4 key购买 nike

GCC9 已经实现了 std::is_constant_evaluated。我用它玩了一点,我意识到它有点棘手。这是我的测试:

constexpr int Fn1()
{
if constexpr (std::is_constant_evaluated())
return 0;
else
return 1;
}

constexpr int Fn2()
{
if (std::is_constant_evaluated())
return 0;
else
return 1;
}

int main()
{
constexpr int test1 = Fn1(); // Evaluates to 0
int test2 = Fn1(); // Evaluates to 0
int const test3 = Fn1(); // Evaluates to 0

constexpr int test4 = Fn2(); // Evaluates to 0
int test5 = Fn2(); // Evaluates to 1
int const test6 = Fn2(); // Evaluates to 0
}

根据这些结果,我得出以下结论:

  • if constexpr (std::is_constant_evaluate()) 总是计算true 分支。因此,使用这种结构是没有意义的。

  • 如果编译器在编译时计算一个变量,std::is_constant_evaluate())true,无论是否变量是否被显式注释constexpr

我说的对吗?

最佳答案

if constexpr 要求条件的常量表达式。所以 is_constant_evaluate 在这种情况下当然总是正确的。

它适用于常规 if。目的是在常量表达式中求值时不进入 constexpr 函数中非法的代码路径。但是让它在运行时执行。它并不是要从函数中完全消除这些代码路径。

关于c++ - std::is_constant_evaluate 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54251530/

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