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. Если преобразование lvalue приводит к значению 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
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.21.2 Тип nullptr_t (с. 315–316)
См. также
| константа нулевого указателя, определяемая реализацией (макроконстанта) |
|
Документация по C++ для nullptr_t |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/types/nullptr_t