我可以返回void函数吗?

时间:2010-02-12 01:39:44

标签: c++

我必须返回上一级递归。是下面的语法吗?

void f()
{
   // some code here
   //
   return;
}

8 个答案:

答案 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();