C++11引入了auto和decltype關鍵字實現型別推導,透過這兩個關鍵字不僅能方便地獲取複雜的型別,還能簡化書寫,提高編碼效率。
1.auto型別推導
1.1 auto關鍵字的新意義
在go語言中,在方法範圍中宣告的變數可以具有型別推導,例如:
var i = 10; //在go中自動型別推導變數i為int型
而C++11中也擁有了類似的功能:auto型別推導,其寫法如下:
auto i = 10;
下面我們看一下auto的一些基本用法:
auto x = 5; //OK: x是int型別
auto pi = new auto(1); //OK: pi被推導為int*
const auto *v = &x; //OK: v是const int*型別,u是const int型別
static auto y = 0.0; //OK: y是double型別
auto int r; //error: auto不再表示儲存型別指示符
auto s; //error: auto無法推匯出s的型別
在上面的示例中:
1)字面量5是一個const int型別,變數x將被推導int型別(const被丟棄,後面說明),並被初始化為5;
2) pi的推導說明auto還可以用於new運算子,在例子中,new運算子後面的auto(1)被推匯出int(1),因此pi的型別是int;
3) 由&x的型別為int,推匯出const auto中auto應該是int,於是v被推到const int,而u則被推導為const int。