C++11 nullptr


【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.

順序 選擇 循環 總結


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM