<分区>
Possible Duplicate:
Which one will execute faster, if(flag==0) or if(0==flag)?
我通常将我的平等条件写成:
if(0==x)
和很多人一样,而不是
if(x==0)
这样编译器会在我不小心键入 = 而不是 == 时告诉我。
有人告诉我,一些编译器将其实现为两个寄存器加载,而不是使用不等于零操作的一个,因此效率较低。
有人知道这是否合理吗?
标签 c++
<分区>
Possible Duplicate:
Which one will execute faster, if(flag==0) or if(0==flag)?
我通常将我的平等条件写成:
if(0==x)
和很多人一样,而不是
if(x==0)
这样编译器会在我不小心键入 = 而不是 == 时告诉我。
有人告诉我,一些编译器将其实现为两个寄存器加载,而不是使用不等于零操作的一个,因此效率较低。
有人知道这是否合理吗?
最佳答案
Someone told me that some compilers implement this as two register loads, instead of one using a not-equal-zero operation
这样做没有技术原因。所以不,任何称职的编译器都不会做出这种无关紧要的区分:因为这两个语句是严格等价的,并且由于编译器可以轻松识别这一点,所以它将以相同的方式对待它们。
请注意,这仅适用于具有行为良好的运算符==
的内置类型和用户定义类型。 理论上用户可以提供一个非对称的operator ==
重载,其中没有给出这种等价性。
关于c++ - (x==0) 可以比 (0==x) 更有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145225/
相关文章:
c++ - 无法将 ifstream 对象声明为我类(class)的成员
c++ - Eigen 能否在其线性代数 Ax=b 中使用超过 Double 的精度
c++ - 带有动态加载库的 undefined symbol "typeinfo"
c++ - 使用 boost::asio 连接到 HTTPS 服务器
c++ - 即将在 c++ 中添加的模块是否会修复/减轻对 pimpl 习语的需求?
C++ : Calling inherited static method from static method
c++ - 使用boost range_iterator数组来分割字符串