このコードでは、参照が宣言され、null ポインタの逆参照から取得された値に初期化されます。
int &nullReference = *(int*)0;
コンパイラの動作に基づいて有効に見えるかもしれませんが、参照は異なるものであることを理解することが重要です。ポインタ。
C 標準 (8.3.2/1) によると:
「参照は、有効なオブジェクトまたは関数を参照するように初期化されます...特に null 参照明確に定義されたプログラムには存在できません。"
これは、有効なオブジェクトを参照しない null 参照が C 内で明確に定義された概念ではないことを強調しています。 .
さらに、標準 (1.9/4) では、「null ポインターの逆参照の影響」は未定義であると述べられています。この場合、null ポインターを使用して参照を初期化すると、null ポインター自体を逆参照することになり、これは明示的に未定義の動作です。
したがって、コードは警告なしでコンパイルされる可能性がありますが、無効です。 C コードは避けてください。 Null 参照はこの言語では有効な概念ではないため、null 参照を作成しようとすると未定義の動作が発生します。
以上がC 参照を Null にすることはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。