文章目錄
- 一、auto的推導規則
- 二、auto的限制
C++11 中有:auto 類型推導
auto x = 5; // OK: x 是 int 類型
auto pi = new auto(1); // OK: pi 被推導為 int*
const auto *v = &x, u = 6; // 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的類型
一、auto的推導規則
從示例中可以看到auto的一些使用方法。它可以同指針、引用結合起來使用,還可以帶上cv限定符(cv-qualifier,const和volatile限定符的統稱)
auto * a = &x; // a -> int*,auto被推導為int
auto b = &x; // b -> int*,auto被推導為int*
auto & c = x; // c -> int&,auto被推導為int
auto d = c; // d -> int ,auto被推導為int
const auto e = x; // e -> const int
auto f = e; // f -> int
const auto& g = x; // e -> const int&
auto& h = g;// f -> const int&
- a和c的推導結果是很顯然的,auto在編譯時被替換為int,因此a和c分別被推導為int*和int&
- b的推導結果說明,其實auto不聲明為指針,也可以推導出指針類型
- d的推導結果說明當表達式是一個引用類型時,auto會把引用類型拋棄,直接推導成原始類型int
- e的推導結果說明,const auto會在編譯時被替換為const int
- f的推導結果說明,當表達式帶有cons(t實際上volatile也會得到同樣的結果)屬性時,auto會把const屬性拋棄掉,推導成non-const類型int
- g、h的推導說明,當auto和引用(換成指針在這里也將得到同樣的結果)結合時,auto的推導將保留表達式的const屬性
通過上面的一系列示例,可以得到下面這兩條規則:
1)當不聲明為指針或引用時,auto的推導結果和初始化表達式拋棄引用和cv限定符后類型一致
2)當聲明為指針或引用時,auto的推導結果將保持初始化表達式的cv屬性
二、auto的限制
- auto是不能用于函數參數
- auto不能用于非靜態成員變量
- auto無法定義數組
- auto無法推導出模板參數
推薦一個零聲學院免費教程,個人覺得老師講得不錯,
分享給大家:
C++初級課程鏈接:
https://ke.qq.com/cozurse/444655?flowToken=1043280
Qt課程鏈接:
https://ke.qq.com/course/444655?flowToken=1044614