[解決済み] CのNULLはC++11のnullptrと同じか?
質問
を使うのが好きです。
nullptr
NULLの代わりに ここでCの関数を呼び出すと (
libjansson
この場合は)
NULL
をC言語で実装したものです。
定義済み
.
について
nullptr
NULLポインタ定数は、ゼロに評価される整数型の積分定数式(5.19)rvalueである"ということがわかりました。
だから、一番安全なのは
auto string_obj=json_object_get(m_handle,name);
if(string_obj!=NULL)
{
auto string=json_string_value(string_obj);
if(string!=NULL)
{return string;}
}
return nullptr;
本当に必要なのか、もっとシンプルにできないか。
auto string_obj=json_object_get(m_handle,name);
if(string_obj!=nullptr)
{
return json_string_value(string_obj); //Assume there is no difference between C NULL and C++11 nullptr
}
return nullptr;
解決方法は?
C++11以降では、ポインタが
==NULL
はまた
==nullptr
であり、その逆も然りです。
使用例
NULL
は、ポインタとの比較以外(例えば文字列の末尾のヌルバイトを表すのに使うなど)では
nullptr
.
場合によっては
NULL
は
#define NULL 0
として、整数の定数
0
は、CやC++でポインタと比較すると、特殊なケースになっています。 この型でない情報は、CとC++の両方でいくつかの問題を引き起こすので、C++では、"適切な"使用例では同じことを行い、"不適切な"使用例のほとんどでは確実にコンパイルに失敗する特別な型と値を作ることにしたのです。
C++の実装が、相互運用するCの実装と互換性がある限り(そうでないことは非常に稀です)、すべてがうまくいくはずです。
はっきり言って、もし
ptr
が任意の種類のポインタである場合、C++では以下の式が等価となります。
ptr == nullptr
ptr == NULL
ptr == 0
!ptr
と同様に、以下のようになります。
ptr = nullptr
ptr = NULL
ptr = 0
で、もし
X
が何らかの型であれば、以下の記述も同様です。
X* ptr = nullptr;
X* ptr = NULL;
X* ptr = 0;
nullptr
は、型を推論するテンプレート関数に渡した場合(
NULL
または
0
になる。
int
は、ポインタを期待する引数に渡されない限りは
nullptr
のままです。
nullptr_t
) で使用される場合、いくつかのコンテキストでは
nullptr
はコンパイルされません (たとえば
char c = NULL;
) (注
char* c=NULL;
)
最後に、文字通りの意味です。
NULL == nullptr
が真であることを示します。
は、その
NULL
定数はポインタ型に昇格し、ポインタとしてはヌルポインタとなり、等しく比較されます。
nullptr
.
にもかかわらず、必ずしもそうとは限りません。
foo(NULL)
そして
foo(nullptr)
を実行します。
void bar(int) { std::cout << "int\n"; }
void bar(void*) { std::cout << "void*\n"; }
template<class T>
void foo(T t) { bar(t); }
foo(NULL);
foo(nullptr);
関連
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] Pythonでnullオブジェクトを参照する
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] nullptrとは一体何ですか?
-
[解決済み】C++でポインタにNULLと0(ゼロ)のどちらを使うか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】stdinとSTDIN_FILENOの違いは何ですか?
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み] struct has no member named
-
[解決済み】LinuxのI_PUSHに相当するもの
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】スタックスマッシュを検出しました
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み】シンプルなC言語のscanfが機能しない?重複