4

これはばかげた質問のように思えますが、今日、戻り値と int を想定しているが常にそうとは限らないメンバー関数を C++ で作成しました。値を返さない非常に単純な関数も作成しました...

int derp()
{
    if (11 == 22) return 0;
}

これは最近の変更ですか?私のコンパイラは壊れていますか?笑

編集:これはところでコンパイルされます

4

2 に答える 2

7

非 void 関数では、すべての制御パスが戻る必要があります。ここでの重要な問題は、コンパイラが診断する必要がないことです。compileis correctは必ずしも同じではないことに注意してください。すべての正しいコードがコンパイルされますが、コンパイルされるすべてのコードが正しいわけではありません。

于 2012-12-03T20:02:51.437 に答える
4

いいえ、C++ ではすべての制御パスが値を返す必要はありませんでした。C++11 および C++03 でも (構文的に) 有効です。

一部のコンパイラは、リターンが欠落しているほとんどの状況を検出できますが、診断は必要ありません。返される制御パスが少なくともある場合、ほとんどは診断を発行しません。

どう見てもUBです。

于 2012-12-03T19:54:52.183 に答える