如果性能改变条件风格

时间:2011-05-09 10:22:17

标签: c++ performance

我有这段代码

void test()
{
        If (condition)
        {
              doSomthing();
        }
}

test();
doSomethingMore();

将其更改为:

是否会产生任何性能影响
void test()
{
        If (!condition)
        {
              return;
        }else
              doSomthing();
        }
}

test();
doSomethingMore();

为什么 ...

2 个答案:

答案 0 :(得分:4)

你真的在问错误的问题。这里的表现完全无关紧要。任何优化编译器都会使它变得无关紧要,可能会为两种样式生成完全相同的二进制文件。

不,实际上真正的问题是哪个代码段更强可读。你的同胞是那些必须在以后阅读和理解你的代码的人。而且,如果你特别不走运,那些将来必须阅读和理解你的代码的人之一甚至可能。因此,编写逻辑结构且易于阅读的代码比忽略这样的微优化更重要。让编译器处理这些。

那么,哪个更具可读性?绝对是第一个。如果condition为真,那么您将调用doSomething()函数。更容易理解。

通常,if语句应评估具有正面名称的条件。大多数情况下,您应该尽量避免使用!符号,因为扫描代码时很容易错过,并且可能会使您的代码被视为双重否定。您通常也应该避免从函数中有多个退出点(即return语句)。您应该能够从上到下阅读该功能,并且无需跳转即可准确查看其功能。第二个代码段违反了这些规则的两个,除了第一个代码片段之外没有什么可以帮助证明更喜欢它。

答案 1 :(得分:2)

对于任何现代编译器来说,像这样的小变化都不会产生任何影响。优化器已经进行了许多小的优化(以及几个大的优化)。

在您的特定示例中,即使使用完全未经优化的编译器也绝对没有区别。您所做的一切都是额外明确的"返回"有时会执行的指令,而不是函数末尾的隐含返回。

您的代码可能会增加四个字节,但执行时间会相同。