【1】關於0 與 NULL

【2】關於nullptr和void*的稱法
nullptr習慣被稱作指針空值
void*習慣被稱作無類型指針
【3】nullptr 和 nullptr_t
nullptr習慣被稱作指針空值
nullptr_t習慣被稱作指針空值類型
即表示指針空值類型並非僅有nullptr一個實例
可以通過nullptr_t來聲明一個指針空值類型的變量
除去nullptr以及nullptr_t以外,C++中還存在各種內置類型。
C++11標准嚴格規定了數據間的關系。常見規則簡單如下:
1. 所有定義為nullprt_t類型的數據都是等價的,行為也完全一致
2. nullprt_t類型數據可以隱式轉換成任意一個指針類型
3. nullptr_t類型數據不能轉換為非指針類型,
即使使用reinterpret_cast<nullptr_t>也是不可以的
4. nullptr_t類型數據不適用算術運算表達式
5. nullptr_t類型數據可以用於關系運算表達式,
但僅能與nullptr_t類型數據或者指針類型數據進行比較
當且僅當關系運算符為==,<=,>=等時返回true
示例代碼如下:
1 #include <iostream>
2 using namespace std; 3
4 void fun(int n) { cout << "fun(int n) : " << n << endl; }; 5 void fun(int *p) { cout << "fun(int *p) : " << p << endl; }; 6
7 void main() 8 { 9 int nZero = 0; 10 int nValue = NULL; // ok
11 int *pZero = 0; // ok
12 int *pNULL = NULL; // ok
13 int *pnullptr = nullptr; // ok
14 void *pEmpty = nullptr; // ok 15
16// int nTemp = nullptr; // error
17 /*
18 關於這條語句的編譯錯誤提示信息如下: 19 error C2440: “初始化”: 無法從“nullptr”轉換為“int” 20 本機 nullptr 只能轉換為 bool 或 使用 reinterpret_cast 轉換為整型 21 */
22 bool bIs = nullptr; 23 int nTemp = reinterpret_cast<int>(nullptr); 24
25 fun(0); //--> fun(int n) : 0
26 fun(NULL); // -->fun(int n) : 0
27 fun((int*)0); // -->fun(int *p) : 00000000
28 fun(nullptr); // -->fun(int *p) : 00000000
29
30 nullptr_t pnull; 31 fun(pnull); // -->fun(int *p) : 00000000
32
33 char* pchar = pnull; 34 int* pInt = pnull; 35
36// int n1 = pnull; 37// int n2 = reinterpret_cast<int>pnull;
38
39 if (0 == nullptr) 40 {} 41// if (nullptr) 42// {} 43
44// nullptr += 1; 45// pnull * 10;
46
47 cout << sizeof(nullptr) << endl; // 4
48 }
Good Good Study, Day Day Up.
順序 選擇 循環 總結
