if - else vs if和return revisited(不询问多次返回是否正常)

psq*_*are 0 c++

关于代码完成的这个例子:

Comparison Compare(int value1, int value2)
{
if ( value1 < value2 )
 return Comparison_LessThan;
else if ( value1 > value2 )
 return Comparison_GreaterThan;
else
 return Comparison_Equal;
}
Run Code Online (Sandbox Code Playgroud)

你也可以这样写:

Comparison Compare(int value1, int value2)
{
 if ( value1 < value2 )
  return Comparison_LessThan;

 if ( value1 > value2 )
  return Comparison_GreaterThan;

 return Comparison_Equal;
}
Run Code Online (Sandbox Code Playgroud)

哪个更优化?(除了可读性等)

Meh*_*ari 17

除了可读性之外,编译器应该足够智能,以便为两种情况生成相同的代码.


Chr*_*isW 6

"除了可读性之外"我希望编译器能够从它们中生成相同的代码.

您可以测试一下,如果您愿意:您的C++编译器可能有生成列表文件的选项,因此您可以看到从每个版本生成的程序集/操作码......或者,您可以使用您的组件看到汇编/操作码调试器检查代码(启动可执行文件后).


Pol*_*878 5

这将在任何编译器...(GCC,visual studio等)中生成相同的代码.编译器的工作原理与我们的逻辑略有不同.如果成为了!...意味着在这两种情况下它都会落到最后一个返回语句中.

编辑:更一般地说,else语句只适用于人类,它实际上并没有在大多数编译器上生成任何内容......在你的情况下这是正确的,而且使用if ... else ...构造的其他任何东西都是如此.