5

私は Java プログラマーで、C++ は初めてです。以下のコードでは、if( condition1 ) が真であることがわかります variable1 が返されます。しかし、最初の if 条件が true と評価された後に 2 番目の 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

いいえ。 areturnが検出されると、関数内の他の処理は行われません。

于 2013-04-04T22:04:52.273 に答える
3

関数は、1 つのreturnステートメントを正確に 1 つ実行する必要があります。

したがって、実行されるか実行されるかのいずれかですが、両方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がfalseの場合、追加の処理が実行され、条件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 に答える