C 11新特性之 nullptr

2021-07-07 01:56:21 字數 559 閱讀 4433

我們知道在程式設計的世界裡,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具有如下格式 ...