3

重複の可能性:
null インスタンスでメンバー関数を呼び出すと、未定義の動作が発生するのはいつですか?

この質問を素晴らしい答えで読みました: null インスタンスでメンバー関数を呼び出すと、未定義の動作が発生するのはいつですか?

基本的に、次のコードは未定義の動作ですか?

struct foo { static void bar() { } };
foo *p = nullptr;
p->bar();

リンクされた投稿によると、これは 1 つは UB で、もう 1 つはそうでないというさまざまな方法で解釈できます。

C++0x では、n3126 の時点で、あいまいさが残っています。

これは最終的な C++11 でも有効ですか?

4

1 に答える 1

5

リンクした質問は、標準の厳密な解釈または弱い解釈のいずれにおいても、表示するコードが未定義の動作であることを明確に示しています。あいまいさは、静的関数に対してのみ存在する可能性があります(そして、あなたの質問は特に非静的関数を参照しています)。

編集: あいまいさは 2012 年 1 月 16 日の日付のままですN3337が、最終的な標準のコピーはありません。問題のコメントに基づくと、問題 232 の解決策が標準に組み込まれなかったようです。これは、意図した未定義の動作ではなく、コンパイル時の概念にするという表現が強すぎたためと思われます。

于 2013-01-23T21:51:51.150 に答える