我有这段代码
void test()
{
If (condition)
{
doSomthing();
}
}
test();
doSomethingMore();
将其更改为:
是否会产生任何性能影响void test()
{
If (!condition)
{
return;
}else
doSomthing();
}
}
test();
doSomethingMore();
为什么 ...
答案 0 :(得分:4)
你真的在问错误的问题。这里的表现完全无关紧要。任何优化编译器都会使它变得无关紧要,可能会为两种样式生成完全相同的二进制文件。
不,实际上真正的问题是哪个代码段更强可读。你的同胞是那些必须在以后阅读和理解你的代码的人。而且,如果你特别不走运,那些将来必须阅读和理解你的代码的人之一甚至可能你。因此,编写逻辑结构且易于阅读的代码比忽略这样的微优化更重要远。让编译器处理这些。
那么,哪个更具可读性?绝对是第一个。如果condition
为真,那么您将调用doSomething()
函数。更容易理解。
通常,if
语句应评估具有正面名称的条件。大多数情况下,您应该尽量避免使用!
符号,因为扫描代码时很容易错过,并且可能会使您的代码被视为双重否定。您通常也应该避免从函数中有多个退出点(即return
语句)。您应该能够从上到下阅读该功能,并且无需跳转即可准确查看其功能。第二个代码段违反了这些规则的两个,除了第一个代码片段之外没有什么可以帮助证明更喜欢它。
答案 1 :(得分:2)
对于任何现代编译器来说,像这样的小变化都不会产生任何影响。优化器已经进行了许多小的优化(以及几个大的优化)。
在您的特定示例中,即使使用完全未经优化的编译器也绝对没有区别。您所做的一切都是额外明确的"返回"有时会执行的指令,而不是函数末尾的隐含返回。
您的代码可能会增加四个字节,但执行时间会相同。