在良好的c/c++程式設計習慣中,宣告乙個變數時最好給該變數乙個合適的初始值,否則可能會出現不可預料的錯誤,比如未初始化的指標。如果乙個指標沒有合法的指向,我們基本就是按照如下方式對其進行初始化:
void
testptr()
null實際是乙個巨集,在傳統的c標頭檔案(stdef.h)中,可以看到如下**:
#ifdef null
#ifdef __cplusplus
#define null 0
#else
#define null ((void*)0)
#endif
#endif
可以看到,*null可以被定義為字面常量0,或者被定義為無型別指標(void)的常量。**不論採用何種定義,在使用空指標時,都不可避免的會遇到一些麻煩,比如:
voidf(
int)
voidf(
int*
)int
main()
程式本意時想通過f(null)呼叫指標版本的f(int*)函式,但是由於null被定義成0,因此與程式的初衷相悖。
在c++98中,字面常量0既可以是乙個整形數字,也可以是無型別的指標(void*)常量,但是編譯器預設情況下將其看成是乙個整型常量,如果要將其按照指標方式來使用,必須對其進行強轉(void*)0.
注意:
1.在使用nullptr表示指標空值時,不需要包含標頭檔案,因為nullptr是c++11作為新關鍵字引入的。
2.在c++11中,sizeof(nullptr)與sizeof((void*)0)所佔的位元組數相同。
3.為了提高**的健壯性,在後續表示指標空值時建議最好使用nullptr.
CPP11新特性 auto關鍵字
在早期c c 中auto的含義是 使用auto修飾的變數,是具有自動儲存器的區域性變數,但遺憾的是一直沒有人去使用它。c 11中,標準委員會賦予了auto全新的含義 auto不再是乙個儲存型別指示符,而是作為乙個新的型別指示符來指示編譯器,auto宣告的變數必須由編譯器在編譯時期推導而得。int t...
CPP11新特性 基於範圍的for迴圈
在c 98中如果要遍歷乙個陣列,可以按照以下方式進行 void testfor for int i 0,i sizeof array sizeof array 0 i array i 2 for int p 0,p array sizeof array sizeof array 0 p cout p...
cpp11智慧型指標
include include using namespace std class obj 1 obj 1 info obj 1 data 0 obj 1 private string info class obj 2 obj 2 info obj 2 data 0 obj 2 private st...