跳回到C++的功能开头

Jumping back to beginning of function in C++

本文关键字:功能 开头 C++      更新时间:2023-10-16

所以我有需要脱离当前函数并回到函数开头的情况,其中一些包括错误检查(我还没有学过trythrowcatch(,直到最近我一直在使用递归,忽略了递归不像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()被调用的线路。 如果它存在,但我知道这是我能做的最糟糕的事情。

>goto并不是"你能做的最糟糕的事情";事实上,在某些情况下,明智的goto比任何替代方案都更具可读性。

但是,这不是这些时间之一。 我建议你做这样的事情:

TYPE input_thing_from_user()
{
    TYPE rv;
    do
        rv = read_input_from_user();
    while (is_invalid(rv));
    return rv;
}

对要输入的每个内容使用单独的循环;如果用户在列表末尾附近搞砸了,请不要让用户重新键入所有内容。

你可以做:

int foo()
{
    while (true)
    {
        ...
        if (/* this should start over */)
            continue;
        ...
        if (/* this should end */)
            return /* some value */;
        ...
    }
}