gpt4 book ai didi

c++ - 是否允许符合标准的 C++ 编译器优化 <= 0 上的无符号整数分支?

转载 作者:太空狗 更新时间:2023-10-29 23:30:11 24 4
gpt4 key购买 nike

考虑这段代码:

void foo(size_t value)
{
if (value > 0) { ... } // A

if (value <= 0) { ... } // B
}

由于 unsigned 不能为负,符合标准的 C++ 编译器是否可以优化掉 B 语句?或者它会选择与 0 进行比较?

最佳答案

好吧,它显然不能完全优化掉 B 语句——条件体确实在 value 时执行。为 0。

value无论如何不能是< 0 ,编译器当然可以将 B 转换为 if (value == 0) { ... } .此外,如果它可以证明(记住标准要求严格的别名规则!)value没有被语句 A 改变,它可以像这样合法地转换整个函数:

void foo(size_t value)
{
if (value > 0) { ... } // A
else { ... } // B
}

或者,如果它碰巧知道目标架构喜欢==更好的是:

void foo(size_t value)
{
if (value == 0) { ... } // B
else { ... } // A
}

关于c++ - 是否允许符合标准的 C++ 编译器优化 <= 0 上的无符号整数分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28882507/

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