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