在聲明變量時(shí)使用auto
代替類(lèi)型蹦误,C++編譯器就會(huì)自動(dòng)推導(dǎo)出變量的類(lèi)型
auto sum = 1 + 1;
sum
被推導(dǎo)為int
歌径,使用auto
聲明的變量必須要被初始化
聯(lián)合聲明中的類(lèi)型推導(dǎo)
auto a = 1,b = 2;//正確映凳,a和b都被推導(dǎo)為int
auto c = 3,*pa = &a;//正確州弟,c和pa都有基本數(shù)據(jù)類(lèi)型int
auto d = 4,e = 1.2;//錯(cuò)誤速挑,聯(lián)合聲明中類(lèi)型必須相同
聯(lián)合聲明中類(lèi)型必須相同暇咆,Swift笑而不語(yǔ)
auto和復(fù)合類(lèi)型
auto i = 0, &ri = i;
auto a = ri;
給a
初始化的是r
引用的變量值锋爪,所以a
被推導(dǎo)為int
auto i = 0, *pi = &i;
auto a = pi;
給a
初始化的是一個(gè)指針,所以a
被推導(dǎo)為一個(gè)int *
auto和常量
int i = 0;
const int ci = i, &cr = ci;
auto b = ci;//b是int
auto c = cr;//c是int
auto d = &i;//d是int *
auto e = &cr;//e是const int *
因?yàn)槭褂靡镁褪鞘褂靡玫闹蛋忠担圆粫?huì)被推導(dǎo)為引用類(lèi)型其骄。ci
的類(lèi)型是const int
,由于使用的是ci
的值得類(lèi)型扯旷,所以b拯爽,c
會(huì)被推導(dǎo)為int
。
因?yàn)?code>ci是const
钧忽,所以指向ci
的指針必須是只讀指針(const int *)
毯炮,所以e被推導(dǎo)為const int *
。
如果需要b
為const int
耸黑,則需要顯示聲明
const auto b = ci;//b是const int
如果想要推導(dǎo)為引用類(lèi)型桃煎,則需要:
auto &g = ci;//g是const int的引用
auto &h = 42;//錯(cuò)誤,非常量引用不可以綁定字面值
const auto &j = 42;//正確大刊,常量引用可以綁定字面值为迈,j就是42的另一個(gè)名字
由于ci
是const
,所以指針e
和引用g
都會(huì)被推導(dǎo)為頂層const
注意:
聯(lián)合聲明中的類(lèi)型必須一致奈揍,const屬于基本數(shù)據(jù)類(lèi)型的一部分曲尸,所以const也需要一致,而*
和&
則從屬于聲明符男翰,不參與另患。
auto k = ci, &l = i;//正確,k和l基本類(lèi)型為int
auto &m = ci,*p = &ci;//正確蛾绎,m和p都為const int
auto &n = i,*p2 = &ci;//錯(cuò)誤昆箕,n為int 而 p2 為const int
以后涉及到新標(biāo)準(zhǔn),就不再研究了