【C++ Primer(7)】auto型別說明符
- auto讓編譯器通過初始值分析表示式所屬的型別,因此auto定義時必須有初始值
- auto一般會忽略頂層const保留底層const,簡單理解就是直接用auto定義的非指標或引用型別都是non-const
int i = 0;
const int ci = i, &cr = ci;
auto b = ci; // b是int,ci的頂層const特性被忽略
auto c = cr; // c是int,cr只不過是ci的別名
auto d = &i; // d是int*
auto e = &ci; // e是const int*(對常量物件取地址是一種底層const)
- 如果希望auto推斷出頂層const,加上const修飾符
const int ci = i;
const auto f = ci; // ci的推演型別是int,f是const int
- 可以將引用的型別設定為auto,相當於用auto替代原來的型別定義,遵循原來的初始化規則,const會保留
int i = 0;
const int &ci = i;
auto& j = ci; // const int &j
auto& k = 42; // 錯誤,引用必須初始化
const auto& r = 42; // const int &r
// 設定auto型別的引用,初始值的頂層const屬性保留
- 對於universal reference,只有右值才會將auto&&推斷為右值引用
int i = 42;
const int j = 55;
auto&& r1 = i; // int& r1
auto&& r2 = j; // const int& r2
auto&& r3 = 45; // int&& r3
- 對陣列名,auto會推斷為指標,而auto&會推斷為陣列
int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
auto a2(a); // a2是int*,和auto a2(&a[0])等價
cout << a2[2]; // 正確,用指標同樣可以獲取元素
for(auto x : a2) cout << x; // 錯誤
auto& a3(a); // int(&)[10]
for(auto x : a3) cout << x; // 正確
- 也可以用decltype來推斷為陣列
decltype(a) a4 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
- 在宣告符列表中,auto必須始終推導為同一型別
auto i = 1, j = 1.1; // 錯誤
相關文章
- Dump型別說明型別
- auto型別型別
- C++ auto 型別推斷注意的地方C++型別
- 《C++ Primer》 ---- 關於變數 與 基本型別C++變數型別
- 深入解析C++的auto自動型別推導C++型別
- 關於C/C++ int (*t5)[3] 指標型別說明C++指標型別
- c# 呼叫 C++ dll 傳入傳出型別對應說明(轉)C#C++型別
- 學懂現代C++——《Effective Modern C++》之型別推導和autoC++型別
- 開心檔之C++ 修飾符型別C++型別
- oracle 各資料型別dump說明(三)Oracle資料型別
- oracle 各資料型別dump說明(二)Oracle資料型別
- oracle 各資料型別dump說明(一)Oracle資料型別
- 聊聊 C++ 中的四種型別轉換符C++型別
- mssql sqlserver text資料型別專題說明SQLServer資料型別
- 【clickhouse專欄】基礎資料型別說明資料型別
- oracle等待事件型別wait_class說明Oracle事件型別AI
- C++四種顯式型別轉換操作符C++型別
- CentOS 7升級核心簡明說明CentOS
- C++ primer 模板與泛型程式設計C++泛型程式設計
- C++ Primer Plus 第四章 複合型別 學習筆記C++型別筆記
- RHEL 7特性說明(四):核心
- 我的隨行筆記7 C++ Primer Plus筆記C++
- 暫別C++ Primer第五版C++
- Oracle10g等待事件型別wait_class說明Oracle事件型別AI
- C++ 訪問說明符詳解:封裝資料,控制訪問,提升安全性C++封裝
- 【ASM C/C++】 Makefile 規則說明ASMC++
- C/C++標頭檔案說明C++
- Java資料型別、識別符號Java資料型別符號
- 【7】JVM引數說明和分析JVM
- RHEL 7特性說明(六):叢集
- 塗鴉雲平臺資料型別和取值約束說明資料型別
- Object C學習筆記1-基本資料型別說明Object筆記資料型別
- C++ 型別宣告C++型別
- C++ 14 auto 教程C++
- Java註釋,識別符號,資料型別,型別轉換Java符號資料型別
- 面試官:兄弟,說說基本型別和包裝型別的區別吧面試型別
- 說說JavaScript的型別轉換JavaScript型別
- 說一下泛型原理,並舉例說明泛型