考虑以下bar
函数
#include <iostream>
void foo(){
std::cout << "Hello" << std::endl;
}
void bar1(){
return foo();
}
void bar2(){
foo();
}
void bar3(){
foo();
return;
}
int main()
{
bar1();
bar2();
bar3();
return 1;
}
这些函数执行完全相同的操作,实际上Godbolt为这三个函数生成相同的代码(正如人们希望的那样)。我的问题很简单,就是是否有任何软件工程范式/准则主张一种形式优于另一种形式,以及是否有任何理由使您偏爱一种形式。它们似乎产生相同的机器代码,但我正在想象一个人可能被视为“更易于维护”或类似的东西。
答案 0 :(得分:4)
这是非常基于意见的。尽管我会说普遍的共识是像bar2()
这样写。除非您必须早点返回,否则不要明确return
,如果return func()
返回func()
则不要void
,这只会使读者感到困惑,因为您实际上并未返回一个值。
答案 1 :(得分:1)
我完全同意Sombrero Chicken的回答。但是我还要补充一点,像
void bar1(){
return foo();
}
对于返回void的普通函数没有多大意义,但是当您不知道实际的返回类型时,对于模板代码可能有用,例如:
template <typename T>
auto SomeTemplateFunction(...)
{
// do some works
...
return SomeOtherTemplateFunction<T>(...);
}
无论SomeOtherTemplateFunction<T>
的返回类型是否为空,这都将起作用。
答案 2 :(得分:1)
这是基于观点的,我可以说的是(3)被clang-tidy规则标记为readibility-redundant-control-flow的一部分。
想法是此处的控制流已经定义,return
是多余的,应将其删除。