在C++中编写许多比较操作的最佳契约是什么?
问题描述:
我使用以下代码来说明我的问题:在C++中编写许多比较操作的最佳契约是什么?
if(a== 0)
{
if(b==0)
{
if(c == 0)
{
//
}
}
}
VS
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在逻辑与表达式中对操作数进行短路和重新排序内存访问?“)指出编译器即使使用短路的逻辑表达式也具有一些优化自由度。
因此,唯一的正确的方法确保性能不变被测量和查看生成的程序集的。
关于“风格”,我觉得这是一个纯粹的主观问题。
为什么不看编译器发出的代码,或者运行一个测试以查看哪个更快? – pm100
对于使用优化编译器编译的任何实际应用程序,最有可能无关紧要。如果这些(小事)是你担心的事情,那么我怀疑你是在玩玩具示例程序,或者你有更多更大的问题。 –
只需注意风格:你不需要'if(a == 0 && b == 0&c == 0)'中的额外括号。 –