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

Содержание

Синтаксис

nullptr

Объяснение

Ключевое слово nullptr обозначает указатель-литерал. Это prvalue типа std::nullptr_t . Существуют неявные преобразования из nullptr в нулевое значение указателя для любого типа указателя и любого типа указателя на член. Аналогичные преобразования существуют для любой константы нулевого указателя, которая включает значения типа std::nullptr_t , а также макрос NULL .

Ключевые слова

nullptr

Пример

Демонстрирует, что nullptr сохраняет значение константы нулевого указателя, даже если он больше не является литералом.

#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);        // Корректно
    g(NULL);           // Корректно
    g(0);              // Корректно
    g(clone(nullptr)); // Корректно
//  g(clone(NULL));    // ОШИБКА: нелитеральный ноль не может быть константой нулевого указателя
//  g(clone(0));       // ОШИБКА: нелитеральный ноль не может быть константой нулевого указателя
}

Вывод:

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

Ссылки

  • Стандарт C++23 (ISO/IEC 14882:2024):
  • 7.3.12 Преобразования указателей [conv.ptr]
  • Стандарт C++20 (ISO/IEC 14882:2020):
  • 7.3.12 Преобразования указателей [conv.ptr]
  • Стандарт C++17 (ISO/IEC 14882:2017):
  • 7.11 Преобразования указателей [conv.ptr]
  • Стандарт C++14 (ISO/IEC 14882:2014):
  • 4.10 Преобразования указателей [conv.ptr]
  • Стандарт C++11 (ISO/IEC 14882:2011):
  • 4.10 Преобразования указателей [conv.ptr]

Смотрите также

определяемая реализацией константа нулевого указателя
(макроконстанта)
(C++11)
тип литерала нулевого указателя nullptr
(typedef)