std::nullptr_t
Определено в заголовке <cstddef> |
||
|---|---|---|
using nullptr_t = decltype(nullptr); |
(с C++11) |
Тип литерала нулевого указателя, nullptr. Это отдельный тип, который сам по себе не является типом указателя или типом указателя на член. Его значения являются константами нулевых указателей (см. NULL), и они могут быть явным образом преобразованы в любой тип указателя и указателя на член.
sizeof(std::nullptr_t) равно sizeof(void *).
Примечания
Стандарт C++ требует, чтобы <stddef.h> разместил содержимое <cstddef> в глобальном пространстве имен и тем самым требует, чтобы nullptr_t был доступен в глобальном пространстве имен при включении <stddef.h>.
nullptr_t не является частью C до C23.
Пример
Если две или более перегрузки принимают разные типы указателей, необходима перегрузка для std::nullptr_t для принятия аргумента нулевого указателя.
#include <cstddef>
#include <iostream>
void f(int*)
{
std::cout << "Pointer to integer overload\n";
}
void f(double*)
{
std::cout << "Pointer to double overload\n";
}
void f(std::nullptr_t)
{
std::cout << "null pointer overload\n";
}
int main()
{
int* pi{};
double* pd{};
f(pi);
f(pd);
f(nullptr); // would be ambiguous without void f(nullptr_t)
// f(0); // ambiguous call: all three functions are candidates
// f(NULL); // ambiguous if NULL is an integral null pointer constant
// (as is the case in most implementations)
}Вывод:
Pointer to integer overload Pointer to double overload null pointer overload
См. также
nullptr(C++11) |
литерал указателя, который задаёт значение нулевого указателя |
| определённое реализацией значение нулевого указателя (макроконстанта) |
|
|
(C++14) |
проверяет, является ли тип std::nullptr_t (шаблон класса) |
Документация C для nullptr_t |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/types/nullptr_t