现代编译器是否优化乘以 1 和 -1

dsp*_*pyz 3 c++ compiler-construction templates sign compiler-optimization

如果我写

template<int sign>
inline int add_sign(int x) {
    return sign * x;
}

template int add_sign<-1>(int x);
template int add_sign<1>(int x);
Run Code Online (Sandbox Code Playgroud)

大多数 C++ 编译器是否足够聪明,可以将乘法乘以 1 或 -1 优化为更快的运算(无操作或否定)?

And*_*zos 6

是的。这是一类称为算术局部优化的简单优化的一部分。例如1 * x可以静态简化为x,同样-1 * x可以简化为-x。生产编译器都执行此操作以及更复杂的优化。