Reading some code I found a class accepting just the new C++11 nullptr_t
as parameter. The class looks like the one below.
Am I correct that the only thing I can construct an object by using exclusively nullptr
?
class CA {
public:
CA(nullptr_t) {}
};
The standard specifies, at §2.14.7.1, that:
The pointer literal is the keyword
nullptr
. It is a prvalue of typestd::nullptr_t
. [ Note:std::nullptr_t
is a distinct type that is neither a pointer type nor a pointer to member type; rather, a prvalue of this type is a null pointer constant and can be converted to a null pointer value or null member pointer value. —endnote]
The only prvalue of type nullptr_t
is nullptr
which is then convertible to other pointer type following the rules specified in §4.10 and §4.11.
Other integer literals can be converted to a value of type std::nullptr_t
as per §4.10.1:
A null pointer constant is an integer literal (2.14.2) with value zero or a prvalue of type
std::nullptr_t
.
Therefore you can use an interger literal with value zero or nullptr
.
Specifically:
0
0u
, 0U
0l
, 0L
0ul
, 0uL
, 0Ul
, 0UL
0ll
, 0LL
0ull
, 0uLL
, 0ULL
nullptr
NULL
I might be missing some cases, so fell free to correct me.
Am I correct that the only thing I can construct an object by using exclusively nullptr?
No. This is covered in §4.10 [conv.ptr]:
A null pointer constant of integral type can be converted to a prvalue of type
std::nullptr_t
.
where a null pointer constant is defined as follows:
A null pointer constant is an integer literal (2.14.2) with value zero or a prvalue of type
std::nullptr_t
.
In other words, your constructor can be invoked also with various integer literals of value 0:
CA{ 0 };
CA{ 0u };
CA{ 0LL };
CA{ 0x0 };
According to the documentation:
std::nullptr_t is the type of the null pointer literal, nullptr.
Which means yes, you can construct this object only with nullptr or a corresponding integral value (as in the answer below explained). Check out this example as it shows a situation where u need it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With