物聯網/嵌入式工程師
重磅升級:新增硬件電路設計與實戰,讓你軟硬通吃,同級PK無敵!行業風口、政策傾斜,新晉熱門高薪不內卷!0基礎一站式就業完整路徑,搶占先發優勢!
int * p = NULL;
int * p = nullptr;
這一小節來看看兩者的區別。
首先看 NULL,在 C++ 中,NULL 其實就是 0。
例如:
int * p = NULL;
等價于:
int * p = 0;
因為在 C++ 中,0 地址通常是被保護起來的,不可訪問的。因此用 0 地址來指代這個指針哪里都不指,是可以的。但是這里面卻存在一些問題。因為 NULL 就是 0,所以我們可以把 NULL 用在其他地方。
例如:
int a = NULL;
我們可以將一個 int 變量賦值成 NULL,你永遠無法阻止有人這么干。而在某些情況下,甚至會在不經意間釀成慘劇。
例如:
class A
{
public:
void func(void * t)
{
}
void func(int i)
{
}
}
這個類中,func 函數有兩個重載。這個時候,我們嘗試用 NULL 調用一下:
int main(int argc,char **argv)
{
A a;
a.func(NULL);
return 0;
}
猜猜這個函數到底調用的哪個重載?
正是由于 NULL 會導致這樣的混亂,所以在 C++11 標準之后,C++ 標準委員會為 C++ 添加了 nullptr 關鍵字。我們可以將 NULL 賦值給一個普通變量,而 nullptr 卻不能。
int a = nullptr;
這樣是會直接報錯的。
nullptr 只能賦值給指針,所以不會有 NULL 那樣的問題。
所以,只要你的編譯器兼容 C++11 標準,那么你應該使用 nullptr。
請驗證,完成請求
由于請求次數過多,請先驗證,完成再次請求
打開微信掃碼自動綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報