名稱空間
變體
操作

std::nullptr_t

來自 cppreference.com
< cpp‎ | 型別
 
 
 
型別支援
基本型別
定寬整數型別 (C++11)
定寬浮點型別 (C++23)
(C++11)    
(C++17)
nullptr_t
(C++11)

數值極限
C 數值極限介面
執行時型別資訊
 
定義於標頭檔案 <cstddef>
using nullptr_t = decltype(nullptr);
(C++11 起)

std::nullptr_t 是空指標字面量 nullptr 的型別。它是一種不同的型別,本身不是指標型別或指向成員的指標型別。此型別的純右值是空指標常量,並且可以隱式轉換為任何指標和指向成員的指標型別。

sizeof(std::nullptr_t) 等於 sizeof(void *)

[編輯] 注意

C++ 標準要求 <stddef.h><cstddef> 的內容放置在全域性名稱空間中,因此當包含 <stddef.h> 時,要求 nullptr_t 在全域性名稱空間中可用。

nullptr_t 在 C23 之前不是 C 的一部分。

未指定 std::nullptr_t 的宣告是否在任何其他標準庫標頭檔案中可用。即使標準要求使用 std::nullptr_t,實現也可以避免引入此名稱,例如透過拼寫 decltype(nullptr) 來代替。

[編輯] 示例

如果兩個或更多過載接受不同的指標型別,則需要一個用於 std::nullptr_t 的過載來接受空指標引數。

#include <cstddef>
#include <iostream>
 
void f(int*)
{
    std::cout << "Pointer to integer overload\n";
}
 
void f(double*)
{
    std::cout << "Pointer to double overload\n";
}
 
void f(std::nullptr_t)
{
    std::cout << "null pointer overload\n";
}
 
int main()
{
    int* pi{};
    double* pd{};
 
    f(pi);
    f(pd);
    f(nullptr); // would be ambiguous without void f(nullptr_t)
    // f(0);    // ambiguous call: all three functions are candidates
    // f(NULL); // ambiguous if NULL is an integral null pointer constant 
                // (as is the case in most implementations)
}

輸出

Pointer to integer overload
Pointer to double overload
null pointer overload

[編輯] 參閱

nullptr (C++11) 指定空指標值的指標字面量[編輯]
實現定義的空指標常量
(宏常量) [編輯]
(C++11)(DR*)
檢查型別是否為 std::nullptr_t
(類模板) [編輯]
C 文件 for nullptr_t