Namespaces
Variants

Predefined null pointer constant (since C23)

From cppreference.net

Содержание

Синтаксис

nullptr (начиная с C23)

Объяснение

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

Ключевые слова

nullptr

Пример

Демонстрирует, что копия nullptr также может использоваться в качестве константы нулевого указателя.

#include <stddef.h>
#include <stdio.h>
void g(int*)
{
    puts("Function g called");
}
#define DETECT_NULL_POINTER_CONSTANT(e) \
    _Generic(e,                         \
        void* : puts("void*"),          \
        nullptr_t : puts("nullptr_t"),  \
        default : puts("integer")       \
    )
int main()
{
    g(nullptr); // OK
    g(NULL); // OK
    g(0); // OK
    auto cloned_nullptr = nullptr;
    g(cloned_nullptr); // OK
    [[maybe_unused]] auto cloned_NULL = NULL;
//  g(cloned_NULL); // зависит от реализации: возможно OK
    [[maybe_unused]] auto cloned_zero = 0;
//  g(cloned_zero); // Ошибка
    DETECT_NULL_POINTER_CONSTANT(((void*)0));
    DETECT_NULL_POINTER_CONSTANT(0);
    DETECT_NULL_POINTER_CONSTANT(nullptr);
    DETECT_NULL_POINTER_CONSTANT(NULL); // зависит от реализации
}

Возможный вывод:

Function g called
Function g called
Function g called
Function g called
void*
integer
nullptr_t
void*

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 6.4.4.6 Предопределенные константы (стр: 66)

Смотрите также

определяемая реализацией константа нулевого указателя
(макрос-константа)
тип предопределенной константы нулевого указателя nullptr
(typedef)