11

C++0x 標準に関する記事を読みました: http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-in-c11-and-why-you-should-care/

厳密に型指定さnullptrれている、つまり整数の 0 と区別できるということです。

f(int);
f(char* p);

f(nullptr); // calls char* version

nullptrそれはすべて良いことですが、2 つのポインター関数について標準が何を言っているのかを知ることに興味があります。

f(char* p);
f(int* p);

f(nullptr);

ここでキャストが必要ですか?そして、nullptrテンプレート化されていますか?

f((int*)(nullptr);
f(static_cast<int*>(nullptr));
f(nullptr<int>);               // I would prefer this
4

1 に答える 1

10

これに関する実際の仕様を読んだことはありませんが、null ポインターは任意の型のポインターに変換できるため、キャストがないと、指定した呼び出しがあいまいになると確信しています。したがって、キャストが必要になるはずです。

いいえ、残念ながらnullptrテンプレートではありません。ただし、私はそのアイデアが本当に好きなので、次のような関数を書くことを検討してください。

template <typename PtrType> PtrType null() {
     return static_cast<PtrType>(nullptr);
}

そして、あなたは書くことができます

f(null<int*>());
于 2011-06-21T19:13:49.843 に答える