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

标签 c++

考虑这段代码:

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/

相关文章:

c++ - 在处理模板时,如何避免在函数头和函数体中两次声明相同的类型?

c++ - 这种阻塞队列的实现安全吗?

c++ - 是否有合法的方式从 gsl::not_null<T> 转移?

c++ - 获取毫秒部分时间

c++ - 虚函数和泛型编程

c++ - 什么是原始字符串?

c++ - 无法显示 OpenGL 纹理

C++:使用 longjmp 和 setjmp 安全吗?

c++ - add_month 从 boost::gregorian 中删除?

c++ - 如何在 cvCvColor 之后获取对 YUV 组件的引用?