C++ 如果有其他分支,返回语句的位置如何?

C++ 如果有其他分支,返回语句的位置如何?,c++,coding-style,C++,Coding Style,在一个函数中,如果整个逻辑都是“如果这个条件为真/假,那么返回这个,否则返回这个”,那么这个函数的最佳或可能是最被接受的形式是什么?我似乎看到了三种方式 int function(bool foo){ if(foo){ return doSomething(); }else{ return somethingElse; } } 这是最有意义的,但我曾经读到,具有返回类型的函数不应该将其返回类型位于分支中。(为什么,消息来源从来没有说过

在一个函数中,如果整个逻辑都是“如果这个条件为真/假,那么返回这个,否则返回这个”,那么这个函数的最佳或可能是最被接受的形式是什么?我似乎看到了三种方式

int function(bool foo){
    if(foo){
         return doSomething();
    }else{
         return somethingElse;
    }
}
这是最有意义的,但我曾经读到,具有返回类型的函数不应该将其返回类型位于分支中。(为什么,消息来源从来没有说过)那么这就是:

int function(bool foo){
    if(foo){
         return doSomething();
    }
    return somethingElse;
}
int function(bool foo){
    int result;
    if(foo){
         result = doSomething();
    }else{
         result = somethingElse;
    }
    return result;
}
它在分支之外有一个返回类型,但它带走了我认为代码的一些含义,我也读到了if-else块的好处。(这些是什么,消息来源也没有说)最后,有这样一个:

int function(bool foo){
    if(foo){
         return doSomething();
    }
    return somethingElse;
}
int function(bool foo){
    int result;
    if(foo){
         result = doSomething();
    }else{
         result = somethingElse;
    }
    return result;
}
这里的意思是,return在一个分支之外,但是在添加了一个变量和代码之后,这个功能实际上并不需要它


我的问题是,这三种形式中的哪一种或任何其他形式(如果有的话)是以这种方式编写函数的最佳方式?

好问题。显示您正在考虑样式、可读性以及我们以不同方式编写相同代码的根本原因。最后,一切都取决于你

1号很好,非常清晰

第二,我通常在测试错误条件时使用。如果我一路走入谷底,那么我就会回报成功。另外一个好处是,你可以经常放下卷发背带而不失去清晰度

当设置来自内部循环的结果时,数字3通常很有用,在这种情况下,可以使用多种类型的返回值,或者当从其他调用传递返回值时,需要进行中间检查。哦,它也适用于你必须做一些不依赖于你的返回值的普通清理

在简单的情况下,你通常不会做第三件事。您可能希望有一个很好的理由将值存储在变量中

你可以说这里有第四个选项:查询冒号操作符。如果您认为内联简单类成员是一种很好的样式,那么这很有用()


我把它写在一行中,因为这通常是你看到它的时候。

我更喜欢第二行,但我认为这根本不重要。第三个对我来说似乎有点不确定,除非你是一个坚持每个函数一个返回语句的人。太主观了。我个人会写:
returnfoo?doSomething():somethingElse。读得好。@JesseGood“仅返回一次”的概念从何而来?”-与“不使用new()-始终在堆栈上创建对象”相同的位置)、“内存应由分配它的函数释放”、“始终使用引用而不是指针”、“在退出应用程序之前必须干净地终止所有线程”,“总是使用计时器而不是睡眠”和所有其他奇怪的“规则”,这些规则像“打鼹鼠”一样不断出现,似乎存在的唯一目的是对那些已经有足够多“真实”bug问题的开发人员强制低效、不适当的设计和无法维护的代码。@MartinJames i.e.所有这些都来自Java程序员。。。