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

std::nullptr_t

Материал из cppreference.com
< cpp‎ | types
 
 
Библиотека метапрограммирования
Свойства типов
Категории типов
(C++11)
(C++14)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Свойства типов
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(до C++20*)
(C++11)(устарело в C++20)
(C++11)
Константы свойств типа
Метафункции
(C++17)
Поддерживаемые операции
Запросы отношений и свойств
Модификации типов
(C++11)(C++11)(C++11)
Преобразования типов
(C++11)(устарело в C++23)
(C++11)(устарело в C++23)
(C++11)
(C++11)
(C++17)

(C++11)(до C++20*)(C++17)
Рациональная арифметика времени компиляции
Целочисленные последовательности времени компиляции
 
Определено в заголовочном файле <cstddef>
using nullptr_t = decltype(nullptr);
(начиная с C++11)

std::nullptr_t это тип литерала нулевого указателя, nullptr. Это особый тип, который сам по себе не является типом указателя или указателем на тип элемента. Его значениями являются константы нулевого указателя (смотрите NULL), и он может быть неявно преобразован в любой указатель и указатель на тип элемента.

sizeof(std::nullptr_t) равно sizeof(void *).

[править] Примечание

Стандарт C++ требует, чтобы <stddef.h> помещал содержимое <cstddef> в глобальное пространство имён и, таким образом, требует доступности std::nullptr_t в глобальном пространстве имён при включении <stddef.h>.

std::nullptr_t не является частью C до C23.

[править] Пример

Если две или более перегрузок принимают разные типы указателей, необходима перегрузка для std::nullptr_t, чтобы принять аргумент нулевого указателя.

#include <cstddef>
#include <iostream>
 
void f(int*)
{
   std::cout << "Перегрузка указатель на int\n";
}
 
void f(double*)
{
   std::cout << "Перегрузка указатель на double\n";
}
 
void f(std::nullptr_t)
{
   std::cout << "Перегрузка нулевой указатель\n";
}
 
int main()
{
    int* pi {}; double* pd {};
 
    f(pi);
    f(pd);
    f(nullptr); // было бы неоднозначно без void f(nullptr_t)
    // f(0);    // неоднозначный вызов: все три функции являются кандидатами
    // f(NULL); // неоднозначно, если NULL является целочисленной константой 
                // нулевого указателя (как и в большинстве реализаций)
}

Вывод:

Перегрузка указатель на int
Перегрузка указатель на double
Перегрузка нулевой указатель

[править] Смотрите также

nullptr(C++11) литерал указателя, задающий нулевое значение указателя[править]
определяемая реализацией константа для нулевого указателя
(макроконстанта) [править]
проверяет, является ли тип std::nullptr_t
(шаблон класса) [править]