【发布时间】:2013-10-02 22:23:26
【问题描述】:
所以我有需要跳出当前函数并回到函数开头的情况,其中一些包括错误检查(我没有学过try、throw或catch然而)并且最近我一直在使用递归,忽略了递归不像goto 的功能并且只是返回到函数的开头而是创建自身的单独副本,因此如果我使用递归来捕获类似于客户端输入错误,如果客户端犯了足够多的错误,可能会导致潜在的内存泄漏。
我想知道是否有一个特定的函数可以让我“重新启动”一个函数。
以使用伪伪代码为例:
int foo(){
//prompt for and receive input
if(!matchCondition)
//stop foo() and restart foo()
//does something
}
我唯一能想到的另一件事是将函数调用放在一个循环中,但如果函数在 main() 中,那并不是最佳的,我不能完全将对 main 的调用放在在main 内循环,而不会创建至少一个副本。另一个不起作用的例子是,如果函数需要返回没有限制的东西,因此可以自然地产生“错误代码”而不会发生错误。
bool ifError=1;
while(ifError){
ifError = foo();
}
int foo(){
//prompt for and receive input
if(!matchCondition)
return 1;
//do something
return 0;
}
我唯一能想到的是 goto 语句指向调用 foo() 的行。如果它存在,但我知道这是我能做的最糟糕的事情。
【问题讨论】:
-
如果跳回到函数的开头,你将如何摆脱糟糕的状态?你乞求陷入无限循环。
-
@Beta 在函数内通常会有提示让客户输入一些东西,跳回来会让他们再次有机会正确输入一些东西。抱歉,我应该指定的。
标签: c++ function methods recursion