[解決済み] nullptrを使用する利点は何ですか?
2022-04-23 21:49:42
質問
このコードの一部 概念的に は、3つのポインタに対して同じことをします(安全なポインタの初期化)。
int* p1 = nullptr;
int* p2 = NULL;
int* p3 = 0;
で、ポインターを割り当てることのメリットは何かというと
nullptr
に値を割り当てるよりも
NULL
または
0
?
解決方法は?
このコードでは、利点がないように見えます。しかし、次のようなオーバーロードされた関数を考えてみてください。
void f(char const *ptr);
void f(int v);
f(NULL); //which function will be called?
どの関数が呼び出されるのでしょうか?もちろん、ここで意図しているのは
f(char const *)
しかし、実際には
f(int)
が呼び出されます! これは大問題です
1
ということでしょうか?
そこで、このような問題を解決するために
nullptr
:
f(nullptr); //first function is called
もちろん、それだけが利点ではありません。
nullptr
. もうひとつご紹介しましょう。
template<typename T, T *ptr>
struct something{}; //primary template
template<>
struct something<nullptr_t, nullptr>{}; //partial specialization for nullptr
テンプレートでは
nullptr
として推論されます。
nullptr_t
ということで、こう書くことができます。
template<typename T>
void f(T *ptr); //function to handle non-nullptr argument
void f(nullptr_t); //an overload to handle nullptr argument!!!
1. C++の場合。
NULL
は次のように定義されます。
#define NULL 0
ということで、基本的には
int
ということです。
f(int)
が呼び出されます。
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] ムーブセマンティクスとは何ですか?
-
[解決済み] nullptrとは一体何ですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較