C++ 单返回语句是否更干净?

C++ 单返回语句是否更干净?,c++,C++,今天,我和我的同事在一个问题上有分歧: 以下哪项是“清洁剂”,为什么 bool check(){ if(!test to do){ return false; } if(!other test to do){ return false; } return true; } 或: 在我看来,这并不重要,因为编译过程。这在功能上几乎不重要,因为编译过程 一些较旧的文本建议使用一个返回,即第二个示例,因为他们说函数的逻辑更容易跟踪

今天,我和我的同事在一个问题上有分歧:

以下哪项是“清洁剂”,为什么

bool check(){
    if(!test to do){
        return false;
    }
    if(!other test to do){
        return false;
    }
    return true;
}
或:

在我看来,这并不重要,因为编译过程。

这在功能上几乎不重要,因为编译过程

一些较旧的文本建议使用一个
返回
,即第二个示例,因为他们说函数的逻辑更容易跟踪

就我个人而言,我不喜欢杂乱无章,觉得第一个例子更容易阅读。在这两种情况下,您仍然需要考虑和推理函数,只是第一种情况不涉及额外的变量,如果/
否则
流混乱,则可能涉及更多的

但是,第一种情况并不总是评估第二种情况,如果第二种情况有性能损失或副作用,您可能会对此感兴趣

此外,编译器更容易省略单个返回语句(这并不重要)


但除此之外,这完全是主观的。

还有一种,就像早期纾困一样。还有一些人认为,函数末尾应该只有一个
return
。我甚至不清楚自己更喜欢什么。。。(也就是说,听起来有点像在征求意见。)@Vlad:我们只能对所呈现的代码进行推理,而不能对其他一些做完全不同事情的假设代码进行推理。您声称所提供的代码段在功能上不等价,这是不正确的。(除了我再次假设没有副作用外:P)@LightnessRacesinOrbit我认为问题在于使用一个返回语句还是多个返回语句。给出的例子不太正确。第二个代码段中的第二个if语句通常应包括对条件中变量结果的测试。遗憾的是,这是基于意见的。只要意见和我的一致就可以了,我的意见是正确的。教条主义者支持第二种方法,因为他们认为调试更容易(当然忘记了异常也会影响线性程序控制流)。第一条路是更好的。如果
other test to do
抛出异常或以某种方式取决于
test to do
的结果,则结果可能不同。第二个代码段中第二个
if
之前的
else
对于返回类型不受复制省略影响的所有情况都是等价的。我个人的观点是,无论是在方法的开始还是结束,额外的返回都是可以的。如果该方法还有其他工作要做,并且开始随机返回,则很难遵循;但是,当在开始时处理前置条件失败,或在结束时量化返回代码时,早期返回会保持代码更干净。那么复制省略呢?多个返回确保编译器始终可以这样做。我怀疑单次退货会导致无法进行优化的情况?(虽然显然不适用于给定的普通布尔示例)@UKMonkey可能!
bool check(){
    bool result = true;
    if(!test to do){
        result =  false;
    }
    if(!other test to do){
        result = false;
    }
    return result;
}