nullptr
, the pointer literal(since C++11)General topics | ||||||||||||||||
Flow control | ||||||||||||||||
Conditional execution statements | ||||||||||||||||
Iteration statements (loops) | ||||||||||||||||
Jump statements | ||||||||||||||||
Functions | ||||||||||||||||
Function declaration | ||||||||||||||||
Lambda function expression | ||||||||||||||||
inline specifier | ||||||||||||||||
Dynamic exception specifications(until C++17*) | ||||||||||||||||
noexcept specifier(C++11) | ||||||||||||||||
Exceptions | ||||||||||||||||
Namespaces | ||||||||||||||||
Types | ||||||||||||||||
Specifiers | ||||||||||||||||
| ||||||||||||||||
Storage duration specifiers | ||||||||||||||||
Initialization | ||||||||||||||||
Expressions | ||||||||||||||||
Alternative representations | ||||||||||||||||
Literals | ||||||||||||||||
Boolean -Integer -Floating-point | ||||||||||||||||
Character -String -nullptr(C++11) | ||||||||||||||||
User-defined(C++11) | ||||||||||||||||
Utilities | ||||||||||||||||
Attributes(C++11) | ||||||||||||||||
Types | ||||||||||||||||
typedef declaration | ||||||||||||||||
Type alias declaration(C++11) | ||||||||||||||||
Casts | ||||||||||||||||
Memory allocation | ||||||||||||||||
Classes | ||||||||||||||||
Class-specific function properties | ||||||||||||||||
| ||||||||||||||||
Special member functions | ||||||||||||||||
Templates | ||||||||||||||||
Miscellaneous | ||||||||||||||||
General | |||||||||||||||||||||
Literals | |||||||||||||||||||||
| |||||||||||||||||||||
Operators | |||||||||||||||||||||
Conversions | |||||||||||||||||||||
Contents |
nullptr | |||||||||
The keywordnullptr
denotes the pointer literal. It is aprvalue of typestd::nullptr_t. There existimplicit conversions fromnullptr
to null pointer value of any pointer type and any pointer to member type. Similar conversions exist for any null pointer constant, which includes values of typestd::nullptr_t as well as the macroNULL.
Demonstrates thatnullptr
retains the meaning of null pointer constant even if it is no longer a literal.
#include <cstddef>#include <iostream> template<class T>constexpr T clone(const T& t){return t;} void g(int*){std::cout<<"Function g called\n";} int main(){ g(nullptr);// Fine g(NULL);// Fine g(0);// Fine g(clone(nullptr));// Fine// g(clone(NULL)); // ERROR: non-literal zero cannot be a null pointer constant// g(clone(0)); // ERROR: non-literal zero cannot be a null pointer constant}
Output:
Function g calledFunction g calledFunction g calledFunction g called
implementation-defined null pointer constant (macro constant)[edit] | |
(C++11) | the type of the null pointer literalnullptr (typedef)[edit] |
C documentation fornullptr |