Namespaces
Variants

nullptr , the pointer literal (since C++11)

From cppreference.net
C++ language
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
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
Special member functions
Templates
Miscellaneous

Table des matières

Syntaxe

nullptr

Explication

Le mot-clé nullptr désigne le littéral de pointeur. C'est une prvalue de type std::nullptr_t . Il existe des conversions implicites de nullptr vers la valeur de pointeur nul de tout type pointeur et de tout type pointeur vers membre. Des conversions similaires existent pour toute constante de pointeur nul, qui inclut les valeurs de type std::nullptr_t ainsi que la macro NULL .

Mots-clés

nullptr

Exemple

Démontre que nullptr conserve la signification de constante de pointeur nul même s'il n'est plus un littéral.

#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);        // Correct
    g(NULL);           // Correct
    g(0);              // Correct
    g(clone(nullptr)); // Correct
//  g(clone(NULL));    // ERREUR : zéro non littéral ne peut pas être une constante de pointeur nul
//  g(clone(0));       // ERREUR : zéro non littéral ne peut pas être une constante de pointeur nul
}

Sortie :

Function g called
Function g called
Function g called
Function g called

Références

  • Norme C++23 (ISO/IEC 14882:2024) :
  • 7.3.12 Conversions de pointeurs [conv.ptr]
  • Norme C++20 (ISO/CEI 14882:2020) :
  • 7.3.12 Conversions de pointeur [conv.ptr]
  • Norme C++17 (ISO/IEC 14882:2017) :
  • 7.11 Conversions de pointeurs [conv.ptr]
  • Norme C++14 (ISO/CEI 14882:2014) :
  • 4.10 Conversions de pointeurs [conv.ptr]
  • Norme C++11 (ISO/IEC 14882:2011) :
  • 4.10 Conversions de pointeurs [conv.ptr]

Voir aussi

constante de pointeur nul définie par l'implémentation
(macro constante)
(C++11)
type du littéral de pointeur nul nullptr
(typedef)
Documentation C pour nullptr