[解決済み] ヌル参照は可能ですか?
2022-03-11 21:17:29
質問
このコード片は有効か(動作が定義されているか)?
int &nullReference = *(int*)0;
を使用しても、g++とclang++の両方が警告なしでコンパイルします。
-Wall
,
-Wextra
,
-std=c++98
,
-pedantic
,
-Weffc++
...
もちろん、この参照はアクセスできない(NULLポインタを再参照することになる)ので、実際にはNULLではありませんが、そのアドレスをチェックすることで、NULLかどうか確認することができます。
if( & nullReference == 0 ) // null reference
解決方法は?
リファレンスはポインタではありません。
8.3.2/1:
参照は、以下のように初期化されなければならない。 有効なオブジェクトまたは関数を参照する。 [注:特に、NULL参照は 定義された なぜなら そのような参照を作成するには によって得られる「オブジェクト」にバインドする。 NULLポインタの参照解除を行う。 は、未定義の動作を引き起こします。このように 9.6で説明したように、参照は はビットフィールドに直接バインドされます。]
1.9/4:
その他の特定の操作については この国際規格では は未定義です(たとえば ヌルポインタの参照解除)
Johannes氏が削除された回答で述べているように、"dereferencing a null pointer"が未定義の動作であると断定的に述べるべきかどうかは疑問が残ります。しかし、NULLポインタは確かに有効なオブジェクトや関数を指していませんし、標準化委員会でもNULL参照を導入しようとは考えていませんので、これは疑問が生じるようなケースとは言えません。
関連
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された