1. 程式人生 > >[C/C++11]_[初級]_[nullptr的簡單介紹和使用]

[C/C++11]_[初級]_[nullptr的簡單介紹和使用]

場景

1.C++11引入了一個空指標型別 nullptr, 他是一個內建型別. 並不是數值0.

2.當一個函式的過載引數是 int 或者 int* 時, NULL都可以作為這個函式的引數, 這樣會搞混淆,甚至會編譯錯誤. 當 NULL 代表 0 時並不能很好的表達是一個指標, 容易出錯. 現在C++11 的 nullptr 可以編譯這個問題.

3.事實上大部分 Windows平臺上對 NULL的定義就是 0

#define NULL    0

說明

1.nullptr的型別是 std::nullptr_t, 而且這個型別名並不是關鍵字, 因為這個型別是通過<cstddef>

定義得來的.

typedef decltype(nullptr) nullptr_t;

2.nullptr和 各種指標型別的轉換是隱式的. 實際上NULL可以強轉成 nullptr.

f((std::nullptr_t)NULL);
f(static_cast<std::nullptr_t>(NULL));

3.當需要傳遞一個 NULL值給指標引數時, 改為我們的 nullptr安全又方便. 當讓你也可以(int*)NULL.

例子

void f(int* pi)
{
   std::cout << "Pointer to integer overload\n"
; } void f(double* pd) { std::cout << "Pointer to double overload\n"; } void f(std::nullptr_t nullp) { std::cout << "null pointer overload\n"; } void f2(int i){ std::cout << "int overload\n"; } void TestNullptr() { int* pi = NULL; double* pd = NULL; f(pi); f(pd); f(nullptr
); f2(NULL); f((std::nullptr_t)NULL); f(static_cast<std::nullptr_t>(NULL)); }

輸出:

Pointer to integer overload
Pointer to double overload
null pointer overload
int overload
null pointer overload
null pointer overload

參考

nullptr_t
nullptr