std::nullptr_t — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(начиная с 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 Перегрузка нулевой указатель