We now have C++11 with many new features. An interesting and confusing one (at least for me) is the new nullptr
.
Well, no need anymore for the nasty mac
How is it a keyword and an instance of a type?
This isn't surprising. Both true
and false
are keywords and as literals they have a type ( bool
). nullptr
is a pointer literal of type std::nullptr_t
, and it's a prvalue (you cannot take the address of it using &
).
4.10
about pointer conversion says that a prvalue of type std::nullptr_t
is a null pointer constant, and that an integral null pointer constant can be converted to std::nullptr_t
. The opposite direction is not allowed. This allows overloading a function for both pointers and integers, and passing nullptr
to select the pointer version. Passing NULL
or 0
would confusingly select the int
version.
A cast of nullptr_t
to an integral type needs a reinterpret_cast
, and has the same semantics as a cast of (void*)0
to an integral type (mapping implementation defined). A reinterpret_cast
cannot convert nullptr_t
to any pointer type. Rely on the implicit conversion if possible or use static_cast
.
The Standard requires that sizeof(nullptr_t)
be sizeof(void*)
.