功能介紹
在存在初始化**的情況下,可以使用auto來自動決定變數的型別。還存在另外一種情況,我們希望變數的型別通過初始化**以外的表示式推斷得到。
假設有下面的結構體:
struct
point;
在其他地方,可能這樣定義point型別的變數:
point
point;
同樣我們也可以定義指向point的指標:
point*p1=nullptr;
在c++11中提供了另一種方式來決定變數的型別:decltype修飾符。利用它可以通過表示式的型別來決定變數的型別:
decltype(point)*p2=
nullptr;
這兩種方式有什麼不同呢?當point的型別發生變化時,p1的型別需要一起修改,p2的型別就不需要修改。
這和sizeof()的引數提倡使用變數名而不是資料型別是一樣的道理。
作者觀點
劉備說:勿以惡小而為之,勿以善小而不為。好的程式也應該從一點一滴的地方開始改善。
C 11特性 decltype關鍵字
我們之前使用的typeid運算子來查詢乙個變數的型別,這種型別查詢在執行時進行。rtti機制為每乙個型別產生乙個type info型別的資料,而typeid查詢返回的變數相應type info資料,通過name成員函式返回型別的名稱。同時在c 11中typeid還提供了hash code這個成員函式...
C 11特性 decltype關鍵字
我們之前使用的typeid運算子來查詢乙個變數的型別,這種型別查詢在執行時進行。rtti機制為每乙個型別產生乙個type info型別的資料,而typeid查詢返回的變數相應type info資料,通過name成員函式返回型別的名稱。同時在c 11中typeid還提供了hash code這個成員函式...
C 11新特性學習
lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...