初期化されていないポインタを評価すると、未定義の動作が発生します。ポインターを逆参照するには最初にそれを評価する必要があるため、これは、逆参照も未定義の動作を引き起こすことを意味します。
これは C++11 と C++14 の両方に当てはまりますが、文言は変更されています。
C++14 では、[dcl.init]/12 で完全にカバーされています。
自動または動的ストレージ期間を持つオブジェクトのストレージが取得されると、そのオブジェクトの値は不確定になり、オブジェクトの初期化が実行されない場合、そのオブジェクトはその値が置き換えられるまで不確定な値を保持します。
評価によって不確定な値が生成された場合、次の場合を除き、動作は未定義です。
ここで、「次のケース」は に対する特定の操作unsigned char
です。
C++11 では、[conv.lval/2] は、左辺値から右辺値への変換手順 (つまり、 で示されるストレージ領域からポインター値を取得する) の下でこれをカバーしましたptr
。
非関数型、非配列型 T の glvalue は、prvalue に変換できます。T が不完全な型の場合、この変換を必要とするプログラムは形式が正しくありません。glvalue が参照するオブジェクトが T 型のオブジェクトでも、T から派生した型のオブジェクトでもない場合、またはオブジェクトが初期化されていない場合、この変換を必要とするプログラムの動作は未定義です。
太字の部分は C++14 用に削除され、[dcl.init/12] の余分なテキストに置き換えられました。