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;
}