在c ++中打破功能

0 c++ function

你怎么把功能留在中间?我有离开功能的条件,但我不知道如何实际离开.

例如:

void a(int &num){
    if (num > 100){
        // leave function
    }
    num += a(num + 1);
}
Run Code Online (Sandbox Code Playgroud)

我想结束递归,我必须保持函数a void

ice*_*ime 10

void a(int &num){
    if (num > 100){
        return;
    }
    num += a(num + 1);
}
Run Code Online (Sandbox Code Playgroud)

正如Martin York的评论所指出的那样,我在没有考虑问题的每个方面的情况下都跳了回答,为此我道歉.你想要的可能是:

int a(int num)
{
    if (num > 100)
         return num;
    return num + a(num + 1);
}
Run Code Online (Sandbox Code Playgroud)

  • 马丁约克:你的意思是"你_不能写`num + = a(num + 1);`"?正如你所说,`a()`不返回值. (2认同)

Mat*_*lia 6

没有什么可以阻止你放在return功能的中间,虽然有些人可能会说这是不好的风格.

这个想法的主要动机是,如果你的函数中有多个返回点,那么维护清理代码会更加困难,必须在每次返回时传播; 但是,使用现代RAII模式(如果您希望代码是异常安全的,则需要这样),您应该在拥有多个出口点时没有问题:清理代码(包含在资源保存对象的析构函数中)无论如何都会被召唤.