Can(x == 0)比(0 == x)更有效吗?

Mon*_*nty 3 c++

可能重复:
哪一个执行得更快,if(flag == 0)或if(0 == flag)?

我通常把我的平等条件写成:

if(0==x)
Run Code Online (Sandbox Code Playgroud)

和许多人一样

if(x==0) 
Run Code Online (Sandbox Code Playgroud)

这样编译器会告诉我什么时候不小心输入=而不是==.

有人告诉我,有些编译器将其实现为两个寄存器加载,而不是使用不等于零的操作,因此效率较低.

有人知道这是否是一个合理的评论?

Kon*_*lph 8

有人告诉我,有些编译器将其实现为两个寄存器加载,而不是使用不等于零的操作

没有技术理由这样做.所以不,任何有价值的编译器都不会产生这种无关紧要的区别:因为两个语句都是严格相同的,并且由于编译器可以轻易地识别它,因此它们将对它们进行相同的处理.

请注意,这仅适用于内置类型和具有良好行为的用户定义类型operator ==.从理论上讲,用户可以提供不对称的operator ==过载,其中没有给出这种等价.

  • 谎言!`struct x {}; bool operator ==(x,int){return true; } bool operator ==(int,x){for(volatile int i = 1; i!= 0;); }`.:P编辑:噢,忍者编辑.:( (3认同)