1. 程式人生 > >【C++】指標空值 nullptr

【C++】指標空值 nullptr

c++98中,指標空值為NULL,NULL實際是一個巨集,在傳統的C標頭檔案(stddef.h)中,可以看到如下程式碼:

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

可以看到,NULL可能被定義為字面常量0,或者被定義為無型別指標(void*)的常量。不論採取何種定義,在
使用空值的指標時,都不可避免的會遇到一些麻煩 。

為了考慮相容性,C++11並沒有消除常量0的二義性,C++11給出了全新的nullptr表示空值指標。C++11為什
麼不在NULL的基礎上進行擴充套件,這是因為NULL以前就是一個巨集,而且不同的編譯器廠商對於NULL的實現可
能不太相同,而且直接擴充套件NULL,可能會影響以前舊的程式。因此:為了避免混淆,C++11提供了
nullptr

,即:nullptr代表一個指標空值常量。nullptr是有型別的,其型別為nullptr_t,僅僅可以被隱式轉
化為指標型別,nullptr_t被定義在標頭檔案中:

typedef decltype(nullptr) nullptr_t;

注意:

1. 在使用nullptr表示指標空值時,不需要包含標頭檔案,因為nullptr是C++11作為新關鍵字引入的。

2. 在C++11中,sizeof(nullptr) 與 sizeof((void*)0)所佔的位元組數相同。

3. 為了提高程式碼的健壯性,在後續表示指標空值時建議最好使用nullptr。