在C++中编写许多比较操作的最佳契约是什么?

问题描述:

我使用以下代码来说明我的问题:在C++中编写许多比较操作的最佳契约是什么?

if(a== 0) 
{ 
    if(b==0) 
    { 
     if(c == 0) 
     { 
      // 
      } 
    } 

} 

VS

if((a==0)&&(b==0)&&(c==0)) 
{ 

} 

第一个代码片段是与当它来自功能在第二相同的。第二个更简洁易懂。我只是想知道代码编译后代码片段是否执行相同的代码。第二个跑得快吗?在这里,我们假设有很多比较。例如

​​
+1

为什么不看编译器发出的代码,或者运行一个测试以查看哪个更快? – pm100

+2

对于使用优化编译器编译的任何实际应用程序,最有可能无关紧要。如果这些(小事)是你担心的事情,那么我怀疑你是在玩玩具示例程序,或者你有更多更大的问题。 –

+0

只需注意风格:你不需要'if(a == 0 && b == 0&c == 0)'中的额外括号。 –

我以后代码编译只是想知道这两个代码片段是否执行相同。

有最有可能将不会有任何显著性能差异 - 链builtin logical operators are short-circuited,这意味着...

if(a && b) { } 

...是语义上等同于 ...

if(a) { if (b) { } } 

无论如何,the discussion in this question(“Can the C compiler optimizer viol在逻辑与表达式中对操作数进行短路和重新排序内存访问?“)指出编译器即使使用短路的逻辑表达式也具有一些优化自由度。

因此,唯一的正确的方法确保性能不变被测量和查看生成的程序集


关于“风格”,我觉得这是一个纯粹的主观问题。