考虑以下代码:
void foo(size_t value)
{
if (value > 0) { ... } // A
if (value <= 0) { ... } // B
}
Run Code Online (Sandbox Code Playgroud)
由于无符号不能为负,符合C++编译器的标准是否可以优化B语句?或者它只是选择比较0?
好吧,它显然无法完全消除B语句 - 条件体在value0 时执行.
既然value不能,无论如何,< 0编译器当然可以将B转换成if (value == 0) { ... }.此外,如果它可以证明(记住标准要求严格的别名规则!)value没有被语句A改变,它可以合法地转换整个函数,如下所示:
void foo(size_t value)
{
if (value > 0) { ... } // A
else { ... } // B
}
Run Code Online (Sandbox Code Playgroud)
或者,如果它碰巧知道目标架构==更喜欢,请执行以下操作:
void foo(size_t value)
{
if (value == 0) { ... } // B
else { ... } // A
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |