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