[C/C++11]_[初級]_[nullptr的簡單介紹和使用]
阿新 • • 發佈:2018-12-01
場景
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