5

nullptr_tいくつかのコードを読んで、新しい C++11だけをパラメーターとして受け入れるクラスを見つけました。クラスは以下のようになります。

を使用して排他的にオブジェクトを構築できるのは正しいnullptrですか?

class CA {
 public:
 CA(nullptr_t) {}  
};
4

3 に答える 3

6

この規格は、§2.14.7.1 で次のように規定しています。

ポインタ リテラルはキーワードnullptrです。タイプの prvalue ですstd::nullptr_t。[ 注:std::nullptr_tは、ポインター型でもメンバー型へのポインターでもない特殊な型です。むしろ、この型の prvalue はヌル ポインター定数であり、ヌル ポインター値またはヌル メンバー ポインター値に変換できます。—文末脚注]

type の唯一の prvalue はnullptr_tnullptr§4.10 および §4.11 で指定された規則に従って、他のポインター型に変換できるものです。

std::nullptr_t他の整数リテラルは、 §4.10.1 に従って型の値に変換できます。

NULL ポインター定数は、値ゼロまたは型の prvalue を持つ整数リテラル (2.14.2)std::nullptr_tです。

したがって、値がゼロまたは の整数リテラルを使用できますnullptr

具体的には:

  • 0
  • 0u0U
  • 0l0L
  • 0ul0uL0Ul0UL
  • 0ll0LL
  • 0ull0uLL0ULL
  • nullptr
  • NULL

いくつかのケースが欠けている可能性があるので、自由に修正してください。

于 2014-11-25T08:04:45.193 に答える
2

ドキュメントによると:

std::nullptr_t は、ヌル ポインター リテラル nullptr の型です。

つまり、このオブジェクトはnullptrまたは対応する整数値でのみ構築できます (以下の回答のように)。必要な状況を示しているので、この例を確認してください。

于 2014-11-25T08:02:31.393 に答える