Spec-Zone.ru › C++

std::nullptr_t

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/nullptr_t

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API