条件样式不断变化的 IF 性能

IF Performance with changing condition style

本文关键字:IF 性能 变化 样式 条件      更新时间:2023-10-16

我有这个代码

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

将其更改为以下方面是否有任何性能影响:

void test()
{
        If (!condition)
        {
              return;
        }else
              doSomthing();
        }
}
test();
doSomethingMore();

为什么??

你真的问错了问题。性能在这里完全无关紧要。任何优化编译器都会使其绝对无关紧要,可能会为两种样式生成完全相同的二进制文件。

不,事实上真正的问题是哪个代码片段更具可读性。你的同胞是以后必须阅读和理解你的代码的人。而且,如果你特别不幸,以后必须阅读和理解你的代码的人之一甚至可能是。因此,编写逻辑结构化且易于阅读的代码比担心这样的微优化要重要得多。让编译器处理这些。

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

通常,if语句应评估正命名的条件。大多数情况下,您应该尽量避免使用!符号,因为它在扫描代码时很容易错过,并且可能会使您的代码被读取为双重否定。通常还应避免从函数(即 return 语句)中有多个退出点。您应该能够从上到下读取该函数,并确切地看到它的作用,而无需跳来跳去。第二个代码片段违反了这两个规则,并且几乎没有其他帮助证明首选它而不是第一个代码片段。

对于任何现代编译器来说,像这样的小改动极不可能产生任何影响。优化器已经执行了许多小的优化(以及几个大的优化)。

在您的特定示例中,即使使用完全未优化的编译器也绝对不会有任何区别。您所做的只是添加一个额外的显式"返回"指令,该指令有时会在函数结束时执行,而不是隐含的返回。

您的代码最终可能会大四个字节,但执行时间是相同的。