Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/language/nullptr"

From cppreference.com
< cpp‎ | language
(Add references to C++ standard)
(It's the "pointer literal", see [lex.nullptr]. And what's unspecified about it?)
Line 1: Line 1:
{{title|nullptr pointer literal}}
+
{{title|nullptr, the pointer literal}}
 
{{cpp/language/expressions/navbar}}
 
{{cpp/language/expressions/navbar}}
  
Line 8: Line 8:
  
 
===Explanation===
 
===Explanation===
The keyword {{tt|nullptr}} denotes the null pointer literal. It is an unspecified [[cpp/language/value_category|prvalue]] of type {{lc|std::nullptr_t}}. There exist {{rlp|implicit_cast|implicit conversions}} from {{tt|nullptr}} to null pointer value of any pointer type and any pointer to member type. Similar conversions exist for any value of type {{lc|std::nullptr_t}} as well as for the macro {{lc|NULL}}, the null pointer constant.
+
The keyword {{tt|nullptr}} denotes the pointer literal. It is a [[cpp/language/value_category|prvalue]] of type {{lc|std::nullptr_t}}. There exist {{rlp|implicit_cast|implicit conversions}} from {{tt|nullptr}} 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 type {{lc|std::nullptr_t}} as well as the macro {{lc|NULL}}.
  
 
===Example===
 
===Example===

Revision as of 21:49, 20 May 2015

 
 
C++ language
General topics
Flow control
Conditional execution statements
if
Iteration statements (loops)
for
range-for (C++11)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications (until C++17*)
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
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
explicit (C++11)
static

Special member functions
Templates
Miscellaneous
 
 

Contents

Syntax

nullptr (since C++11)

Explanation

The keyword nullptr denotes the pointer literal. It is a prvalue of type std::nullptr_t. There exist implicit conversions from nullptr 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 type std::nullptr_t as well as the macro NULL.

Example

Demonstrates how nullptr allows forwarding via a template function.

#include <cstddef>
#include <iostream>
 
template<class F, class A>
void Fwd(F f, A a)
{
    f(a);
}
 
void g(int* i)
{
    std::cout << "Function g called\n";
}
 
int main()
{
    g(NULL);           // Fine
    g(0);              // Fine
 
    Fwd(g, nullptr);   // Fine
//  Fwd(g, NULL);  // ERROR: No function g(int)
}

Output:

Function g called
Function g called
Function g called

Keywords

nullptr

See also

implementation-defined null pointer constant
(macro constant) [edit]
(C++11)
the type of the null pointer literal nullptr
(typedef) [edit]

References

  • C++11 standard (ISO/IEC 14882:2011):
  • 4.10 Pointer conversions [conv.ptr]