Namespaces
Variants

std:: nullptr_t

From cppreference.net
Utilities library
Определено в заголовочном файле <cstddef>
using nullptr_t = decltype ( nullptr ) ;
(начиная с C++11)

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

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

Примечания

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

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

Не указано, доступно ли объявление std::nullptr_t в каких-либо других заголовочных файлах стандартной библиотеки. Реализация может избегать введения этого имени даже когда стандарт требует использования std::nullptr_t , например, используя decltype ( nullptr ) вместо этого.

Пример

Если две или более перегрузки принимают различные типы указателей, перегрузка для 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++11) ( DR* )
проверяет, является ли тип std::nullptr_t
(шаблон класса)