1. C++98中的指標空值
在良好的C/C++編程習慣中,宣告一個變數時最好給該變數一個合適的初始值,否則可能會出現不可預料的錯誤,比如未初始化的指標,如果一個指標沒有合法的指向,我們基本都是按照如下方式對其進行初始化:
void test()
{
int* p = NULL;//預處理,宏替換:int*p=0
int* p2 = 0;
}
NULL實際是一個宏,NULL可能被定義為字面常量0,或者被定義為無型別指標(void*)的常量,不論采取何種定義,在使用空值的指標時,都不可避免的會遇到一些麻煩,比如:
void fun(int a)
{
cout << "fun(int)" << endl;
}
void fun(int* a)
{
cout << "fun(int*)" << endl;
}
void test()
{
int* p = NULL;//預處理,宏替換:int*p=0
int* p2 = 0;
fun(NULL);
fun((int*)NULL);
fun(nullptr);
}
程式本意是想通過f(NULL)呼叫指標版本的f(int*)函式,但是由于NULL被定義成0,因此與程式的初衷相悖,
在C++98中,字面常量0既可以是一個整形數字,也可以是無型別的指標(void*)常量,但是編譯器默認情況下將其看成是一個整形常量,如果要將其按照指標方式來使用,必須對其進行強轉(void *)0,


注意:
- 在使用nullptr表示指標空值時,不需要包含頭檔案,因為nullptr是C++11作為新關鍵字引入的,
- 在C++11中,sizeof(nullptr) 與 sizeof((void*)0)所占的位元組數相同,
- 為了提高代碼的健壯性,在后續表示指標空值時建議最好使用nullptr
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262199.html
標籤:其他
