歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++11新特性:自動類型推斷和類型獲取

C++11新特性:自動類型推斷和類型獲取

日期:2017/3/1 9:50:16   编辑:Linux編程

自動類型推斷

當編譯器能夠在一個變量的聲明時候就推斷出它的類型,那麼你就能夠用auto關鍵字來作為他們的類型:

auto x = 1;

編譯器當然知道x是integer類型的。所以你就不用int了。接觸過泛型編程或者API編程的人大概可以猜出自動類型推斷是做什麼用的了:幫你省去大量冗長的類型聲明語句。

比如下面這個例子:

在原來的C++中,你要想使用vector的迭代器得這麼寫:

vector<int> vec;
vector<int>::iterator itr = vec.iterator();

看起來就很不爽。現在你可以這麼寫了:

vector<int> vec;
auto itr = vec.iterator();

果斷簡潔多了吧。假如說自動類型推斷只有這樣的用法的話那未免也太naive了。在很多情況下它還能提供更深層次的便利。

比如說有這樣的代碼:

template <typename BuiltType, typename Builder>
void
makeAndProcessObject (const Builder& builder)
{
BuiltType val = builder.makeObject();
// do stuff with val
}

這個函數的功能是要使用builder的makeObject產生的實例來進行某些操作。但是現在引入了泛型編程。builder的類型不同,那麼makeObject返回的類型也不同,那麼我們這裡就得引入兩個泛型。看起來很復雜是吧,所以這裡就可以使用自動類型推斷來簡化操作:

template <typename Builder>
void
makeAndProcessObject (const Builder& builder)
{
auto val = builder.makeObject();
// do stuff with val
}

因為在得之builder的類型之後,編譯器就已經能知道makeObject的返回值類型了。所以我們能夠讓編譯器自動去推斷val的類型。這樣一來就省去了一個泛型。

你以為自動類型推斷只有這樣的用法?那也太naive了。C++11還允許對函數的返回值進行類型推斷

Copyright © Linux教程網 All Rights Reserved