c++ 我可以在void函数中返回吗?

13z8s7eq  于 2023-03-05  发布在  其他
关注(0)|答案(9)|浏览(238)

我必须返回到递归的前一级。语法是否如下所示?

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

qlvxas9a1#

是的,您可以从void函数返回。
有趣的是,你也可以从void函数返回void。例如:

void foo()
{
  return void();
}

正如预期的那样,这与普通的return;相同,看起来可能很深奥,但原因是为了模板的一致性:

template<class T>
T default_value()
{
  return T();
}

在这里,default_value返回一个默认构造的T类型对象,并且由于能够返回void,因此即使T = void也能工作。

yzuktlbb

yzuktlbb2#

当然。只是不应该返回实际值。

uurv41yg

uurv41yg3#

是的,您可以使用该代码从函数返回。(我在这里必须非常详细地说明,以免Stack Overflow认为我的答案太短)

hpxqektj

hpxqektj4#

是的,这将从函数返回到递归的前一级。这将是非常基本的解释,但是当你调用一个函数时,你正在创建一个新的调用堆栈。在递归函数中,你只是简单地添加到调用堆栈中。通过从函数返回,无论你是否返回一个值,你把堆栈指针移回堆栈上的前一个函数,这有点像一堆盘子,你不断地往上面放盘子,但是返回的时候会移动最上面的盘子.
你也可以使用调试器来验证这一点。只要在你的代码中放置几个断点并单步调试它。你就可以自己验证它是否工作。

mtb9vblg

mtb9vblg5#

简单的答案是肯定的!C++将void方法识别为一个没有返回的函数。它基本上告诉编译器,无论发生什么,一旦你看到return;中断并离开该方法...。

kd3sttzy

kd3sttzy6#

是的,有时候您可能希望返回void()而不是什么都不返回。
考虑一个void函数,它想调用一些没有一堆if-else的传递void函数。

return 
  InputEvent == E_Pressed ? Controller->Grip() :
  InputEvent == E_Released ? Controller->Release() :
  InputEvent == E_Touched ? Controller->Touch() : void();
np8igboo

np8igboo7#

你不应该在那里有return,程序会自己返回到前一个函数,进入调试模式,单步执行,你自己就能看到,另一方面,我不认为在那里有return会对程序有任何伤害。

jaql4c8m

jaql4c8m8#

就像其他人说的,是的,你可以。在这个例子中,return是不必要的,而且毫无疑问是有作用的。我认为你指的是在函数中间的早期返回。你也可以这样做,但是这是一个糟糕的编程实践,因为它导致了复杂的控制流(不是单入口单出口),沿着break这样的语句,而是使用if/else()这样的条件跳过函数的其余部分。

f1tvaqid

f1tvaqid9#

是的,例如:

void foo()
{
    // do smth
}

然后

void bar(bool condition)
{
    if (condition) {
        return foo(); //its ok
    }
    // else do smth
}

相关问题