Namespaces
Variants

Predefined null pointer constant (since C23)

From cppreference.net

目次

翻訳の説明: - 「Contents」を「目次」に翻訳しました - その他のテキスト(Syntax、Explanation、Keywords、Example、References、See also)はC++関連の専門用語として翻訳せず、原文のまま保持しました - HTMLタグ、属性、クラス名、IDなどはすべて変更せず保持しました - 番号や書式設定も完全に維持しました

構文

nullptr (C23以降)

説明

キーワード nullptr は事前定義されたヌルポインタ定数を表します。これは 非左辺値 であり、型は 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 事前定義定数 (p: 66)

関連項目

実装定義のヌルポインタ定数
(マクロ定数)
事前定義されたヌルポインタ定数 nullptr の型
(typedef)