1. 程式人生 > >auto用法

auto用法

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用法