我必须返回上一级递归。是下面的语法吗?
void f()
{
// some code here
//
return;
}
答案 0 :(得分:75)
是的,您可以从void函数返回。
有趣的是,您也可以从void函数返回void。例如:
void foo()
{
return void();
}
正如所料,这与普通return;
相同。它可能看起来很深奥,但原因在于模板的一致性:
template<class T>
T default_value()
{
return T();
}
此处,default_value
返回类型为T的默认构造对象,并且由于能够返回void
,即使T
= void
,它也能正常工作。< / p>
答案 1 :(得分:10)
不确定。你不应该返回实际值。
答案 2 :(得分:4)
是的,这将从函数返回到先前的递归级别。这将是非常基本的解释,但是当您调用函数时,您正在创建一个新的调用堆栈。在递归函数中,您只需添加到该调用堆栈。通过从函数返回,无论是否返回值,您都将堆栈指针移回堆栈上的上一个函数。它有点像一堆盘子。你继续把盘子放在上面,但是返回时会移动顶板。
您也可以使用调试器验证这一点。只需在代码中加入一些断点并逐步完成。您可以验证自己是否有效。
答案 3 :(得分:3)
是的,您可以使用该代码从函数返回。 (我必须非常详细,以使Stack Overflow不要说我的答案太短了)
答案 4 :(得分:2)
你不必在那里返回,程序将自动返回到上一个函数,进入调试模式并逐步执行,你可以自己查看。 另一方面,我认为没有回报会对程序造成伤害。
答案 5 :(得分:2)
这个简单的答案是肯定的! C ++将void方法识别为没有返回的函数。它基本上告诉编译器无论发生什么,一旦你看到return;
中断并离开方法....
答案 6 :(得分:2)
正如其他人所说,是的,你可以。在这个例子中,返回不是必需的,并且可疑地用于目的。我认为你所指的是在函数中间的早期回归。你也可以这样做,但这是糟糕的编程实践,因为它导致复杂的控制流(不是单入单退出),以及像break这样的语句。相反,只需使用if / else()等条件跳过函数的其余部分。
答案 7 :(得分:2)
是的,有时您可能希望返回void()而不是仅返回空值。
考虑一个void函数,该函数要调用一些传递的void函数,而无需使用if-else。
return
InputEvent == E_Pressed ? Controller->Grip() :
InputEvent == E_Released ? Controller->Release() :
InputEvent == E_Touched ? Controller->Touch() : void();