在C ++中,是否会返回一个将终止父函数的嵌套函数?

时间:2016-04-07 06:13:21

标签: c++ function if-statement return break

我想要这样的事情发生:

void a(){
    b()
    // if condition met in b(), exit out of this function also
}
void b(){
    if(condition){
        super return
        // also returns out of function a
    }
}

我似乎无法想办法做到这一点。任何帮助,将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:4)

b必须无效吗?您可以通过以下方式正常完成:

void a()
{
    // if condition met in b(), exit out of this function also
    if( !b() )
    {
        return;
    }
    //continue...
}
bool b(){
    if(condition)
    {
        return false;
        // also returns out of function a
    }
    return true;
}

答案 1 :(得分:4)

C ++中没有办法完全按照你的要求去做。提供了4种机制,您可以通过它们实现类似的功能。

  1. 返回逻辑值:从b返回一个值,在a中测试并立即退出。
  2. 设置全局变量:在b中设置全局可访问的标志,在a中测试并立即退出。
  3. 异常:在a的调用者中创建一个try / catch块,在b中抛出异常并将其捕获到a。
  4. 之外。
  5. Setjmp / longmp:在a的调用者中创建一个setjmp,在b中调用longjmp。
  6. 这些是你的选择。您可以编写帮助程序或宏或模板以使其更易于使用,但这是您必须选择的。

    编辑:分别处理全局和返回值。

    请注意,这是一个复杂的主题,并且有许多陷阱,包括使用longjmp跨越非平凡的析构函数的未定义行为。警告程序员!

答案 2 :(得分:0)

您可以通过以下任何一种方式进行操作

  1. 从第二种方法返回布尔类型。在第一种方法中检查返回类型然后采取行动。
  2. 类似

    void a(){
        if(b())
            return;
    }
    bool b(){
        if(condition){
            // do something
            return true;
        }
    }
    
    1. 从第二种方法抛出一个异常。从调用方法中你可以捕获它。