5

我是一名 Java 程序员,不熟悉 C++。在下面的代码中,我知道 if(condition1) 为真 variable1 被返回。但是是否有任何机制可以在第一个 if 条件评估为 true 之后处理第二个 if ?我问这个是因为我见过这样的代码,并且在调试时发现了它。

if( condition1 )
{
    return variable1;
}

//do some processing here

if( condition2 )
{
    return variable2;
}
4

6 回答 6

22

尽管有一种方法可以在 return 语句之后运行代码,但在 return 语句执行后无法再次返回。

以下是如何让一些代码在 return 语句之后运行:

struct AfterReturn {
    ~AfterReturn() {
        // This code will run when an AfterReturn object goes out of scope
        cout << "after return" << endl;
    }
};

int foo() {
    AfterReturn guard; // This variable goes out of scope on return
    cout << "returning..." << endl;
    return 5;
    // This is when the destructor of "guard" will be executed
}

int main() {
    cout << foo() << endl;
    return 0;
}

上面的程序打印

returning...
after return
5
于 2013-04-04T22:07:52.443 回答
5

不会。一旦return遇到 a,就不会处理函数中的任何其他内容。

于 2013-04-04T22:04:52.273 回答
3

您的函数必须执行 1 条且正好 1return条语句。

因此,要么return variable1被执行,要么被执行if(condition2),但绝不会同时执行。

于 2013-04-04T21:59:45.053 回答
1

return不,到达语句后永远不会执行代码。但是,如果condition1为 false,则return未到达该语句,因此执行正常进行。这也正是 Java 的行为方式。

有反对早期return陈述的论据,但我个人认为它们很有帮助;试图避免它们可能会导致无关紧要的东西,例如对你没有任何好处的临时变量或大块if,由于它们的范围,它们大多只是令人困惑。

于 2013-04-04T22:04:21.110 回答
0

只有当它被调用时才会执行。此时,您将离开该功能/方法。在您的情况下,如果条件 1 为假,它将运行您的额外处理,然后继续测试条件 2。

现在,在您的情况下,您的代码可能无法编译。(我知道它不会在 Java 中)这是因为在这种情况下我们会迷路,这两个条件都可能不满足。因此,您可能应该在 if 语句之外获得一些回报。

简而言之,在调用 return 之后不会执行任何代码。

于 2013-04-04T22:05:12.490 回答
0

据我记得(或者至少像我的老师告诉我的那样)在执行结束return 之前使用并不是一个好主意,递归函数除外。

我建议您使用一个变量来存储您想要作为函数结果返回的值,并在函数结束时返回它:

if( condition1 )
{
    ans = variable1;
}

/* more code */

if( condition2 )
{
    ans = variable2;
}
return ans;
于 2013-04-04T22:02:16.030 回答