name=value
和for i in range(10)
之间实际上存在性能差异,其中-foo
是类型(-1)*foo
的变量吗?
理论上,一元运算符应该更快。但是我认为编译器会对此进行优化。
答案 0 :(得分:2)
-foo
和(-1)*foo
之间确实存在性能差异
理论上可以。 C ++标准不能保证任何一种方式。
但是,假设foo
的类型是整数,则这些表达式的可观察行为之间绝对没有区别。因此,在这种情况下,允许编译器为每个表达式生成相同的二进制程序。理想的优化程序应生成性能更好的程序。
您的真实编译器是否为两个程序生成相同的输出是另一回事-没有真正的编译器是理想的。您可以通过使用两个替代程序的编译器,然后比较输出来找出答案。