一元运算符和二元运算符之间的性能差异

Performance difference between unary and binary operator

-foo(-1)*foo 之间是否真的存在性能差异,其中 foo 是类型 int 的变量? 理论上,一元运算符应该更快。但我认为编译器会优化它。

Is there actually a performance difference between -foo and (-1)*foo

理论上是可以的。 C++ 标准不保证任何一种方式。

但是,假设 foo 的类型是整数,那么这些表达式的可观察行为之间绝对没有区别。因此,在这种情况下,允许编译器为任一表达式生成相同的二进制程序。一个理想的优化器应该生成性能更好的程序。

您的真实编译器是否为两个程序生成相同的输出是另一回事 - 没有一个真实的编译器是理想的。您可以通过对两个替代程序使用编译器然后比较输出来找出答案。