nullptr_t
いくつかのコードを読んで、新しい C++11だけをパラメーターとして受け入れるクラスを見つけました。クラスは以下のようになります。
を使用して排他的にオブジェクトを構築できるのは正しいnullptr
ですか?
class CA {
public:
CA(nullptr_t) {}
};
この規格は、§2.14.7.1 で次のように規定しています。
ポインタ リテラルはキーワード
nullptr
です。タイプの prvalue ですstd::nullptr_t
。[ 注:std::nullptr_t
は、ポインター型でもメンバー型へのポインターでもない特殊な型です。むしろ、この型の prvalue はヌル ポインター定数であり、ヌル ポインター値またはヌル メンバー ポインター値に変換できます。—文末脚注]
type の唯一の prvalue はnullptr_t
、nullptr
§4.10 および §4.11 で指定された規則に従って、他のポインター型に変換できるものです。
std::nullptr_t
他の整数リテラルは、 §4.10.1 に従って型の値に変換できます。
NULL ポインター定数は、値ゼロまたは型の prvalue を持つ整数リテラル (2.14.2)
std::nullptr_t
です。
したがって、値がゼロまたは の整数リテラルを使用できますnullptr
。
具体的には:
0
0u
、0U
0l
、0L
0ul
、0uL
、0Ul
、0UL
0ll
、0LL
0ull
、0uLL
、0ULL
nullptr
NULL
いくつかのケースが欠けている可能性があるので、自由に修正してください。
ドキュメントによると:
std::nullptr_t は、ヌル ポインター リテラル nullptr の型です。
つまり、このオブジェクトはnullptrまたは対応する整数値でのみ構築できます (以下の回答のように)。必要な状況を示しているので、この例を確認してください。