Пространства имён
Варианты
Действия

nullptr, литерал указателя (начиная с C++11)

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление потоком
Операторы условного выполнения
if
Операторы итерации (циклы)
Операторы перехода
Функции
Объявление функции
Выражение лямбда-функции
Спецификатор inline
Спецификации динамических исключений (до C++17*)
Спецификатор noexcept (C++11)
Исключения
Пространства имён
Типы
Спецификаторы
decltype (C++11)
auto (C++11)
alignas (C++11)
Спецификаторы длительности хранения
Инициализация
Выражения
Альтернативные представления
Литералы
Логические - Целочисленные - С плавающей запятой
Символьные - Строковые - nullptr (C++11)
Определяемые пользователем (C++11)
Утилиты
Атрибуты (C++11)
Types
Объявление typedef
Объявление псевдонима типа (C++11)
Casts
Неявные преобразования - Явные преобразования
static_cast - dynamic_cast
const_cast - reinterpret_cast
Выделение памяти
Классы
Свойства функции класса
explicit (C++11)
static
Специальные функции-элементы
Шаблоны
Разное
 
Выражения
Общие
Категории значений (lvalue, rvalue, xvalue)
Порядок оценки (точки последовательности)
Константные выражения
Потенциально оцениваемые выражения
Первичные выражения
Лямбда-выражения(C++11)
Литералы
Целочисленные литералы
Литералы с плавающей запятой
Логические литералы
Символьные литералы, включая управляющие последовательности
Строковые литералы
Литерал нулевого указателя(C++11)
Пользовательский литерал(C++11)
Операторы
a=b, a+=b, a-=b, a*=b, a/=b, a%=b, a&=b, a|=b, a^=b, a<<=b, a>>=b
++a, --a, a++, a--
+a, -a, a+b, a-b, a*b, a/b, a%b, ~a, a&b, a|b, a^b, a<<b, a>>b
a||b, a&&b, !a
a==b, a!=b, a<b, a>b, a<=b, a>=b, a<=>b (начиная с C++20)
a[b], *a, &a, a->b, a.b, a->*b, a.*b
a(...), a,b, a?b:c
выражение new
выражение delete
выражение throw
alignof
sizeof
sizeof...(C++11)
typeid
noexcept(C++11)
Выражения свёртки(C++17)
Альтернативные представления операторов
Приоритет и ассоциативность
Перегрузка операторов
Сравнение по умолчанию(C++20)
Преобразования
Неявные преобразования
Обычные арифметические преобразования
const_cast
static_cast
reinterpret_cast
dynamic_cast
Явные преобразования: (T)a, T(a), auto(a), auto{a} (начиная с C++23)
Пользовательское преобразование
 

Содержание

[править] Синтаксис

nullptr (начиная с C++11)

[править] Объяснение

Ключевое слово 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 << "Вызвана функция g\n";
}
 
int main()
{
    g(nullptr);        // Успех
    g(NULL);           // Успех
    g(0);              // Успех
 
    g(clone(nullptr)); // Успех
//  g(clone(NULL));    // ОШИБКА: нелитеральный ноль не может быть константой нулевого указателя
//  g(clone(0));       // ОШИБКА: нелитеральный ноль не может быть константой нулевого указателя
}

Вывод:

Вызвана функция g
Вызвана функция g
Вызвана функция g
Вызвана функция g

[править] Ссылки

  • C++23 стандарт (ISO/IEC 14882:2023):
  • 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
(определение типа) [править]