auto用法
阿新 • • 發佈:2017-06-27
pla clas roc eth 編譯 定義 iter iterator proc
在C++11中,如果編譯器在定義一個變量的時候可以推斷出變量的類型,不用寫變量的類型,你只需寫auto即可。
第一種用法:自動推到內置類型
int x = 100; //C++ 11 auto x = 100;
第二種用法:自動推導模版和叠代器類型
vector<int> vec; auto iter = vec.iterator();
第三種用法:用於模版
template <typename BuiltType, typename Builder> void makeAndProcessObject(cosnt Builder& builder) { BuiltType val = builder.makeObject(); //do something }
上面的代碼,我們看到這裏需要兩個模板參數:一個是Builder對象的類型,另一個是Builder創建出的對象的類型。糟糕的是創建出的類型無法被推導出,所以每次你必須這樣調用:
MyObjBuilder builder; makeAndProcessObject<MyObjBuilder>(builder);
使用C++ 11後的修改為:
template <typename Builder> void makeAndProcessObject(const Builder& builder) { auto val = bulder.makeObject(); //... } MyObjBuilder builder; makeAndProcessObject(builder);
auto用法