C 11新特性之自動型別判斷以及匿名函式

2021-07-04 15:52:22 字數 1275 閱讀 4638



1、auto關鍵字

在c++11中,加入了auto關鍵字進行自動型別判斷,省去了大量冗長的型別宣告語句。當你用auto關鍵字時,編譯器可以對你宣告的變數進行自動推導。比如

auto a = 1;

這裡就將a推導為int型。

而我們經常使用vector迭代器,如果不使用auto的話,就會比較繁瑣,比如

std::vectortest_vec;

std::vector::iterator itr = test_vec.iterator();

使用auto之後會簡化**,如下

std::vectortest_vec;

auto itr = test_vec.iterator();

auto可以在同個賦值語句宣告多個變數,不過型別必須相同。否則編譯會出錯。同時,不能宣告auto陣列,std::vector或者類似也不被允許。

2、匿名函式

lambda函式也稱lambda表示式,是乙個可以接收任意多個引數並且返回單個表示式值的函式。

舉個例子:

int add(int a, int b)

利用lambda表示式我們可以這樣寫:

auto fun = (int a, int b);

fun();      

// call the function

其中表示接下來開始定義 lambda函式,後面的()填寫的是lambda函式的引數列表,{}就是函式體。我們也可以顯示地指定lambda函式的返回型別,比如:

() -> int

說以總的說lambda函式形式為:

[captures] (params) -> ret

在cocos2d-x 3.0如何使用lambda函式呢,看下面例子:

auto closeitem = menuitemimage::create(  

"closenormal.png",  

"closeselected.png",  

cc_callback_1(helloworld::menuclosecallback,this)); 

void helloworld::menuclosecallback(object* sender)    

使用lambda函式後,

auto closeitem = menuitemimage::create(  

"closenormal.png",  

"closeselected.png",  

(object* sender)  

); 

C 11新特性之POD型別

pod plain old data 是c 中非常重要的乙個概念,用來描述乙個型別的屬性其中plain表示這個型別是個平凡的型別,old表示其與c的相容性。c 11中將pod劃分為兩個基本概念 平凡的 trival 和標準布局 standardlayout 什麼是平凡性呢?通常乙個平凡的類或者結構體...

C 11新特性 自動型別推斷和型別獲取

當編譯器能夠在乙個變數的宣告時候就推斷出它的型別,那麼你就能夠用auto關鍵字來作為他們的型別 cpp view plain copy auto x 1 編譯器當然知道x是integer型別的。所以你就不用int了。接觸過泛型程式設計或者api程式設計的人大概可以猜出自動型別推斷是做什麼用的了 幫你...

C 11新特性之 nullptr

我們知道在程式設計的世界裡,0有雙重的角色,可以表示整數零,也可以表示乙個空指標。在c語言中,通過預編譯巨集null,可以區分0表示的是零還是 void 0.但是,在c 的世界中,這樣是不可以的。c 中允許函式過載。例如 void foo char void foo int 如果把null定義為0,...