0

例えば:

object* pObject = nullptr;

また:

object* pObject = 0;

繰り返しますが、パフォーマンスに関してはどちらが優れていますか?

4

3 に答える 3

4

nullptrstd::nullptr_tであるため、コンストラクターはオーバーロードされます。これは、null であるという事実が型にエンコードされていることを意味するため、条件を回避することで理論的には高速になる可能性があります。

ポインターには明らかにオーバーロードされたコンストラクターがないため、使用するかどうか0nullptr関係ありません。同じマシンコード、同じパフォーマンス。

とにかく、nullptrnull ポインターが必要な場合に使用します。0ポインタではなく整数オーバーロードを呼び出すので注意してください。

于 2012-11-03T04:23:34.733 に答える
2

それらはまったく同じです。リテラル0を使用してポインターを初期化できるという事実は、純粋に言語構文の一部であり、コンパイラーによって処理されます。結果はnullptr、ポインターを初期化するために使用する場合と同じです。null ポインターが得られます。

nullptr型システムの一部であり、生成されたマシン コードとは何の関係もありません。(以前は存在しなかったポインタ型のリテラルが存在するように存在します。)

于 2012-11-03T04:27:17.850 に答える
0

std::string を参照していると思います。

また、入力するつもりだったと思いますstring* mystr = 0;。ポインターでない場合は、null にすることはできません。

それらはほぼ確実にまったく同じものにコンパイルされ、好きなものを使用します。


編集を にするとobject*、私の答えは同じです。2つはほぼ確実に同じものにコンパイルされるので、好きなものを使用してください。

于 2012-11-03T04:21:44.693 に答える