我們知道在程式設計的世界裡,0有雙重的角色,可以表示整數零,也可以表示乙個空指標。
在c語言中,通過預編譯巨集null,可以區分0表示的是零還是(void*)0.
但是,在c++的世界中,這樣是不可以的。c++中允許函式過載。例如:
void foo(char *);
void foo(int);
如果把null定義為0,那麼foo(null)將呼叫哪個函式呢?
這樣的話,編譯器不會知道呼叫哪個函式。
所以c++11引入了另乙個關鍵字nullptr,作為乙個空指標。
char *pc = nullptr; // ok
int *pi = nullptr; // ok
bool b = nullptr; // ok. b is false.
int i = nullptr; // error
foo(nullptr); // calls foo(char *), not foo(int);
C 11 新特性 nullptr 學習
nullptr 出現的目的是為了替代 null。在某種意義上來說,傳統 c 會把 null 0 視為同一種東西,這取決於編譯器如何定義 null,有些編譯器會將 null 定義為 void 0 有些則會直接將其定義為 0。c 不允許直接將 void 隱式轉換到其他型別,但如果 null 被定義為 v...
c 11新特性之auto
在早期版本中,auto關鍵字用來宣告具有自動儲存器的區域性變數,auto關鍵字很少被使用,除了靜態變數之外,其它的變數預設是auto的。因此,在c 11中,刪除了原有的功能,並對其重新設計,增加了auto的型別推導功能。template double add t1 a,t2 b int main i...
C 11 新特性之 lambda
這是c 11新特性介紹的第三部分,涉及到c 11這次更新中較為重要的lambda表示式。不想看toy code的讀者可以直接拉到文章最後看這部分的總結。熟悉python的程式設計師應該對lambda不陌生。簡單來說,lambda就是乙個匿名的可呼叫 塊。在c 11新標準中,lambda具有如下格式 ...