我必须返回到之前的递归级别。下面的语法对吗?
void f()
{
// some code here
//
return;
}
是的,您可以从 void 函数返回。
有趣的是,您还可以从 void 函数返回 void。例如:
void foo()
{
return void();
}
正如预期的那样,这与普通的
return;
相同。这可能看起来很深奥,但原因是为了模板一致性:
template<class T>
T default_value()
{
return T();
}
这里,
default_value
返回类型为T的默认构造对象,并且由于能够返回void
,所以即使当T
= void
时它也能工作。
当然。您只是不应该返回实际值。
是的,您可以使用该代码从函数返回。 (我必须在这里非常详细,以免 Stack Overflow 说我的答案太短)
是的,这将从函数返回到上一层递归。这将是非常基本的解释,但是当您调用函数时,您正在创建一个新的调用堆栈。在递归函数中,您只需添加到该调用堆栈即可。通过从函数返回,无论是否返回值,都会将堆栈指针移回到堆栈上的前一个函数。它有点像一堆盘子。你不断地在上面放盘子,但返回时会移动顶板。
您还可以使用调试器来验证这一点。只需在代码中放置几个断点并单步执行即可。您可以自己验证它是否有效。
这个问题的简单答案是肯定的! C++ 将 void 方法识别为不返回的函数。它基本上告诉编译器,无论发生什么,一旦你看到
return;
中断并离开该方法......
是的,有时您可能希望返回 void() 而不是什么都不返回。
考虑一个 void 函数,它想要调用一些传递 void 函数,而不需要一堆 if-else。
return
InputEvent == E_Pressed ? Controller->Grip() :
InputEvent == E_Released ? Controller->Release() :
InputEvent == E_Touched ? Controller->Touch() : void();
你不应该在那里有return,程序会自己返回到上一个函数,进入调试模式并单步执行,你可以自己看到。 另一方面,我认为返回那里根本不会损害该计划。
正如其他人所说,是的,你可以。在此示例中,返回不是必需的,而且其用途值得怀疑。我认为你指的是函数中间的提前返回。您也可以这样做,但这是不好的编程习惯,因为它会导致复杂的控制流(不是单入口单出口),以及诸如break之类的语句。相反,只需使用 if/else() 等条件跳过函数的其余部分即可。
是的,例如:
void foo()
{
// do smth
}
然后
void bar(bool condition)
{
if (condition) {
return foo(); //its ok
}
// else do smth
}