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
См. также
| константа нулевого указателя с реализацией, зависящей от реализации (макроконстанта) |
|
Документация 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