7

私の質問はC++return;と同じですか?return NULL;

C ++では、ポインターのコンテキストreturn NULL;と同じであることを理解しています。return 0;明らかに、整数の場合、これは当てはまりません。NULL は加算、減算などを行うことができないためです。移植性が向上するため、ポインタには NULL の代わりに 0 を使用することを推奨する人もいます。これが同等性が発生する別の例であるかどうか、私は興味があります。

return;は「何も返さない」と言っており、NULLは「何もない」と言っているので、それらは同等であると思われます。ただし、誰かがこれを確認または否定できる場合 (もちろん説明付きで)、私は非常に感謝しています!

4

6 に答える 6

13

C++とreturn;同じですか?return NULL;

いいえ。

return戻り値を持たない関数、つまり の戻り値の型から「抜け出す」ために使用されますvoid

return NULLは値を返します。値NULLが含まれる関数の戻り値の型は、と互換性がある必要がありますNULL


C ++では、ポインターのコンテキストreturn NULL;と同じであることを理解しています。return 0;

並べ替え。NULLと同等ではないかもしれませんが0、少なくとも何かに変換されます。


明らかに整数の場合、これは当てはまりません。NULL は加算、減算などができないためです。

ポインタへの加算と減算を問題なく実行できます。ただし、NULLいずれにせよ整数型 (C++03 では 4.10/1 および 18.1/4) でなければならないため、意味がありません。またはNULLに展開されるマクロである可能性が非常に高いです。00UL

NULLただし、最新のコンパイラの中には、実際に自分が書いたものである場合に少なくとも警告するものもあります。


また、ポインタに NULL の代わりに 0 を使用することを推奨する人もいます。これは、移植性が向上するためです。これが同等性が発生する別の例であるかどうか、私は興味があります。

いいえ、私はこのアドバイスに同意しません。どこから来たのかはわかりますが、NULLの正確な定義は実装によって異なるため、 C++11 に切り替えたとき、および他に自己文書化されていない場合は、 を使用NULLすると置き換えがはるかに簡単になります。nullptr

于 2012-11-03T19:59:38.053 に答える
7

returnvoid式なしは、関数が、コンストラクター、またはデストラクタで宣言されている場合にのみ機能します。int、、などを返す関数から何も返さないようにしようとするとdouble、プログラムはコンパイルされません。

エラー:return-値のないステートメント、関数内で'int'を返します</p>

C ++11の§6.6.3/2によると:

式もbraced-init-listも含まないreturnステートメントは、値を返さない関数、つまり、return型がvoidの関数、コンストラクター(12.1)、またはデストラクタ(12.4)でのみ使用できます。 。

(素晴らしいコメントをくれたsftrabbitに感謝します)。

于 2012-11-03T19:55:54.070 に答える
1

returnreturn 0return NULLは同じではありません

return次のような関数が返される場合にのみ有効ですvoid

void func(...);

return 0あるintタイプを返す関数用です。例:

unsigned long func(...);

浮動小数点型でも機能しますが、次のようになります。

double func(...) { ... return 0; }

return NULLあるpointerタイプを返す関数用です。例:

Something *func(...);
于 2012-11-03T19:56:25.870 に答える
0

これはvoid関数のように機能し、returnは関数を終了するだけで、何も返しません。これは以前に尋ねられました。

于 2012-11-03T19:55:33.937 に答える
0

結果のマシンコードには違いがあります。

return呼び出し元の元に命令ポインタを戻すだけです。

return 0または、スタックに配置してからreturn NULL、呼び出し元の呼び出し元に命令ポインターを戻します。(Cでは、通常はにマップされますが、実装によって異なる場合があります(可能性がありますか?)。C++では、使用することは想定されていません)。0NULL0NULL

于 2012-11-03T19:58:19.520 に答える