0

未定義の動作は c++ のコンパイラに依存しますか?

すべてのコンパイラには、すべての問題に対する独自の動作があります。

4

4 に答える 4

3

未定義は実際には未定義を意味します。つまり、何でも起こり得るということです。

コンパイラに依存できますか?はい。

すべてのコンパイラで同じことができますか? はい。

今日は 1 つのことを、明日は 1 つのことを行うことができますか? はい。

プログラムをクラッシュさせることはできますか? はい。

やるべきだと思っていて、うまく機能しているように見えることはできますか?はい。

何でも起れる。

于 2012-05-10T07:15:02.520 に答える
2

未定義の動作に関して、
C++ 標準セクション 1.3.24 は次のように述べています。

許容される未定義の動作は、状況を完全に無視して予測不可能な結果を​​もたらすことから、翻訳中またはプログラム実行中に環境に特有の文書化された方法で動作すること (診断メッセージの発行の有無にかかわらず)、翻訳または実行の終了 (診断メッセージの発行を伴う) にまで及びます。診断メッセージの)。

したがって、はい、コンパイラは、未定義の動作が発生したときに必要な動作を自由に表示できます。

于 2012-05-10T07:09:26.067 に答える
1

未定義の動作を構成するものは、C++ 標準で指定されています。

未定義の動作を示すコードに遭遇したときにコンパイラが生成するコードは、定義上、何でもかまいません。これは、コンパイラの作成者に最適化の余地を与えるためです。

未定義の動作は、プログラムが何でもできることを意味することに注意してください。クラッシュ、例外のスロー、メモリの特定の領域への書き込みを保証するものではありません。ご存じのとおり、ファイルシステム全体を削除してからごみ箱を取り出すことができます。これは C++ 標準では問題ありません。

未定義の動作は避けてください。

于 2012-05-10T07:06:22.057 に答える
1

未定義の動作は c++ のコンパイラに依存しますか?

はい
次のように主張できます。

適切に定義された動作は標準に準拠しており、すべてのコンパイラで同様にサポートされています。

したがって、

未定義の動作は標準に準拠しておらず、コンパイラは自由にやりたいことを実行できます。

于 2012-05-10T07:06:29.113 に答える