[解決済み】C++でポインタにNULLと0(ゼロ)のどちらを使うか?
質問
C++がC言語の上にボルトで固定された初期の頃、NULLは次のように定義されていたので使うことができませんでした。
(void*)0
. 以外のポインタに NULL を代入することはできませんでした。
void*
ということで、ちょっと使い勝手が悪かったです。その当時は
0
(ゼロ)はヌルポインタの場合です。
今日に至るまで、私はゼロをヌルポインターとして使い続けてきましたが、周りの人はどうしても
NULL
. 個人的には、名前を付けることに何のメリットも感じないのですが (
NULL
そして、私はポインタを真実の値としてテストするのが好きなのです。
if (p && !q)
do_something();
を使用する場合、ゼロを使用する方がより理にかなっています(例えば、あなたが
NULL
を使用すると、論理的に
p && !q
- との比較を明示的に行う必要があります。
NULL
を想定していない限り
NULL
がゼロの場合、なぜ
NULL
).
NULLより0を好む客観的な理由はあるのでしょうか、それとも単なる個人の好みなのでしょうか?
編集:RAIIと例外を使えば、ゼロ/NULLポインタを使うことはほとんどありませんが、それでも必要な場合があることを付け加えておきます(もともと言うつもりでした)。
解決するには?
以下は、Stroustrupの見解です。 C++のスタイルとテクニックに関するFAQ
<ブロッククオート
C++では、以下のように定義されています。
NULL
は0なので、見た目の違いだけです。私はマクロを避けたいので0を使っています。
NULL
は、0と違う、あるいは整数でないと誤解されることがあります。標準化以前のコードでは
NULL
は、不適切なものとして定義されることがあり、そのため避けなければならないことがありました。最近はあまり見かけなくなりました。
ヌルポインターに名前を付ける必要がある場合、その名前を
nullptr
C++11ではそのように呼ばれています。 では。
nullptr
はキーワードになります。
とはいえ、小さなことで悩まないでください。
関連
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] C++でNULLを使う?[重複]する
-
[解決済み] nullptrとは一体何ですか?
-
[解決済み] NULLと'ⅳ0'と'0'の違いは何ですか?