威尔';其他';应在C+中使用+;如果返回以完成该函数 只是好奇C++中编写代码的好实践,下面的代码作为一个例子: int do_something() { bool bHas; .... .... if (bHas) { ... return 1; } ... do something else ... return 2; } 在上述代码中,我们可以看到,如果代码> BoO-BAd被设置为真,那么函数将在中间完成;否则,它将继续执行rest代码。也可以按以下方式编写上述代码: int do_something() { bool bHas; .... .... if (bHas) { ... return 1; } else { ... do something else ... return 2; } }

威尔';其他';应在C+中使用+;如果返回以完成该函数 只是好奇C++中编写代码的好实践,下面的代码作为一个例子: int do_something() { bool bHas; .... .... if (bHas) { ... return 1; } ... do something else ... return 2; } 在上述代码中,我们可以看到,如果代码> BoO-BAd被设置为真,那么函数将在中间完成;否则,它将继续执行rest代码。也可以按以下方式编写上述代码: int do_something() { bool bHas; .... .... if (bHas) { ... return 1; } else { ... do something else ... return 2; } },c++,C++,如您所见,这一次“else”用于根据bool bHas的值准确地告诉您将执行什么操作。我的问题是:哪种做法更好?谢谢 乍一看,第二种方法看起来更好,因为它在returns语句中的一致性。对我来说,在方法中使用单个返回点更可取。它使识别语句、调试和扩展代码变得更容易,并且不容易出错。我会写这样的东西 int do_something() { bool bHas; .... .... int retValue; if (bHas) { ...

如您所见,这一次“
else
”用于根据
bool bHas
的值准确地告诉您将执行什么操作。我的问题是:哪种做法更好?谢谢

乍一看,第二种方法看起来更好,因为它在returns语句中的一致性。对我来说,在方法中使用单个返回点更可取。它使识别语句、调试和扩展代码变得更容易,并且不容易出错。我会写这样的东西

int do_something()
{ 
   bool bHas;
   ....
   ....
   int retValue;
   if (bHas)
   {
     ...
     retValue = 1; 
   }
   else
   {

   ... do something else
   ...
   retValue = 2;
   }

 .....
 return retValue;
}

生成的代码将是相同的,因此这取决于个人喜好。因此,这是离题的。(我省略了
else
,因为它不必要地引入了另一层缩进)与第一层更好(太多缩进会使代码不那么可见)你有证据表明一个返回语句产生更好的代码吗?@stefan,我有没有说过类似的话?我倾向于同意你,但我可以看到例外;如果函数以
开关
if/else if
链结束,并且所有分支明显以
返回
结束,我将使用多个返回。(如果返回的类型没有默认构造函数,那么这是必需的。)重要的是它必须是“明显的”;例如,每个分支都必须非常短。@stefan所有关于验证程序正确性的文献都是基于单入口/单出口原则的。在某些情况下,我将使用多个返回,但只有当它们可以很容易地被同化为单个入口/单个出口时(即,单个分支结构,其中每个分支都会导致
返回
)。@stefan有证据表明,单个返回点产生更好的代码(更好=更可读、更容易出错等)。例如,书的代码完整是1.)解释原因,2.)提及证据。