C 11中新特性 型別推導

2022-06-21 22:30:17 字數 1538 閱讀 5425

c++11標準為c++程式語言的第三個官方標準,正式名叫iso/iec 14882:2011 - information technology -- programming languages -- c++。在正式標準發布前,原名c++0x。它將取代c++標準第二版iso/iec 14882:2003 - programming languages -- c++成為c++語言新標準。

c++11是對目前c++語言的擴充套件和修正, c++11不僅包含核心語言的新機能,而且擴充套件了c++的標準程式庫(stl) ,併入了大部分的c++ technical report 1(tr1) 程式庫(數學的特殊函式除外)。

c++11包括大量的新特性:包括lambda表示式,型別推導關鍵字auto、 decltype,和模板的大量改進。

auto的自動型別推導,用於從初始化表示式中推斷出變數的資料型別。從這個意義上講,auto並非一種「型別」宣告,而是乙個型別宣告時的「佔位符」,編譯器在編譯時期會將auto替換為變數實際的型別。

通過auto的自動型別推導,可以大大簡化我們的程式設計工作:

#include #include #include using namespace std;

double foo() {}

void func(vector& tmp)

}int main()

str;

auto str1 = str; // str1的型別是struct m

auto z; // err, 無法推導,無法通過編譯

z = x;

return 0;

}

注意點:

void fun(auto x =1) {}  // 1: auto函式引數,有些編譯器無法通過編譯

struct str

;int main()

; return 0;

}

decltype實際上有點像auto的反函式, auto可以讓你宣告乙個變數,而decltype則可以從乙個變數或表示式中得到其型別,如下:

#include #include #include using namespace std;

int main()

enum flag; // 匿名的列舉變數

decltype(flag) tmp = ok;

return 0;

}

返回型別後置:在函式名和引數列表後面指定返回型別。

int func(int, int);

auto func2(int, int) -> int;

templateauto sum(const t1 & t1, const t2 & t2) -> decltype(t1 + t2)

template auto mul(const t1 & t1, const t2 & t2) -> decltype(t1 * t2)

int main()

C 11中新特性之 unordered map

2015 03 09 22 17 42 閱讀 0 收藏 0 點我收藏 標籤 des class com使用 si資料 itla unordered map和map類似,都是儲存的key value的值,可以通過key快速索引到value。不同的是unordered map不會根據key的大小進行排序...

C 11新特性之POD型別

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

C 11新特性學習

lambda表示式用於建立匿名的函式物件,語法為 函式可訪問的的外部變數 函式引數 返回值型別 如 int a 1,b 2 int c b int x int b 表示函式中可以訪問外部變數b,而且引數b是按值傳遞,b 表示引數b是按引用傳遞,表示可以訪問所有外部變數,並且是用按值傳遞方式,類似,也...