Spec-Zone.ru › C

nullptr_t

Определено в заголовке <stddef.h>
typedef typeof(nullptr) nullptr_t;
(с C23)

nullptr_t является типом предопределённой константы нулевого указателя, nullptr. Это отдельный тип, который сам по себе не является типом указателя. Он может быть неявным образом преобразован в любой тип указателя или bool, и результатом будет значение нулевого указателя соответствующего типа или false соответственно. Ни один другой тип, кроме nullptr_t , не может быть преобразован или явно приведён к типу nullptr_t.

sizeof(nullptr_t) и alignof(nullptr_t) равны sizeof(void*) и alignof(void*) соответственно.

nullptr_t имеет только одно допустимое значение, т.е. nullptr. Представление объекта nullptr совпадает с представлением объекта (void*)0. Если программа генерирует значение nullptr_t с другим представлением объекта, поведение не определено.

Пример

Продемонстрировать, что nullptr_t — это отдельный тип.

#include <stddef.h>
#include <stdio.h>
 
#define DETECT_NULL_POINTER_CONSTANT(e) \
    _Generic(e,                         \
        void* : puts("void*"),          \
        nullptr_t : puts("nullptr_t"),  \
        default : puts("other")       \
    )
 
int main()
{
    DETECT_NULL_POINTER_CONSTANT(((void*)0));
    DETECT_NULL_POINTER_CONSTANT(0);
    DETECT_NULL_POINTER_CONSTANT(nullptr);
}

Вывод:

void*
other
nullptr_t

См. также

NULL
константа нулевого указателя с реализацией, зависящей от реализации
(макроконстанта)
Документация C++ для nullptr_t

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

Spec-Zone.ru

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