c++11 auto 类型说明符详解
生活随笔
收集整理的這篇文章主要介紹了
c++11 auto 类型说明符详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當使用 auto 自動推斷類型時,需要注意以下幾點:
一、必須要有初始值
一個顯而易見的道理,auto 表示編譯器根據初始值類型推斷聲明變量的類型,因此必須要有初始值。
二、一條聲明語句只能有一種基本類型
auto i = 0, *p = &i; // 正確,基本類型是int auto sz = 0, pi = 3.14; // 錯誤,由sz推斷基本類型是int,但pi是double需要特別注意,第一條語句的 * 是從屬于p的,表示p是指針,與基本類型無關,基本類型是int。
三、auto 一般會忽略初始值的頂層const屬性
所謂頂層const和底層const,是為了研究指針而引入的說法。頂層const屬性是指針自身具有const屬性;而底層const屬性則是指針特有的,指的是指針指向對象具有的const屬性。
一般來說,討論指針以外的對象時,const屬性都是指頂層const。引用類型比較特殊,因為引用本身不是對象,而是另一個對象的別名,因此討論引用的const屬性時一定指的是底層const。
auto i = 0;const int ci = i, &cr = ci; // cr是ci的別名 auto b = ci; b++; // b是int,ci的頂層const屬性被忽略 auto c = cr; c++; // c是int,cr(即ci)的頂層const屬性被忽略 auto d = &i; (*d)++; // int * auto e = &ci; // 對常量對象取地址是底層const,所以e是指向常量的指針const int * const auto f = ci; // 明確指出f具有頂層const
四、auto 聲明引用會保留初始值的頂層const屬性
五、auto 聲明不能引用字面值,除非明確指明
六、 & * 不屬于基本類型,而是聲明符的一部分
auto i = 0; const int ci = i, &cr = ci; // cr是ci的別名 auto k = ci, &l = i; // auto推斷基本類型是 int auto &m = ci, *p = &ci; // m是對常量的引用,p是指向常量的指針 //auto &n = i, *p2 = &ci; // ERROR七、引用即別名
時刻記住這條真理,遇到類似下面的情況就不會犯迷糊!
總結
以上是生活随笔為你收集整理的c++11 auto 类型说明符详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: const 和指针赋值
- 下一篇: vector 删除符合条件的元素