考虑这段代码:
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/