std::nullptr_t
來自 cppreference.com
定義於標頭檔案 <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
|