auto
auto讓編譯器通過初始值來推算變量的類型--------因此,auto定義的變量必須有初始值.
1.讓引用對象作爲初始值
--------------------------------------使用引用其實是使用引用的對象
int i=0,&c=i;
auto a=c;//a是int型變量
2.auto與引用
------------------------------------一般來說,auto會忽略頂層const.
const int i=0,&j=i;
auto a=i; //a是一個int(而非const)
auto b=j; //b是一個 int (非const) 等同於auto b=i;
auto p=&i; //p是一個指向常量的指針(const int*),底層const
因此,當我們希望推斷出來的auto是頂層const時,需要明確指出
const auto c=i;
------------------------------------將引用的類型設置爲auto,頂層const屬性仍將保留
const int i=0;
auto &c=i; //c爲const int
------------------------------------要在同一條語句中定義多個auto變量時,初始值必須是同一類型
(符號*和&只從屬於某個聲明符,而非基本數據的一部分)
const int c=0;
auto &cr=c,*p=&c; //錯誤,這裏cr爲 const int , p對應的auto爲 int
decltype
有的時候我們想用一個表達式的值推算出要定義變量的類型,但是又不想用該表達式的值初始化變量,這個時候可以選擇decltype.它的作用是返回一個表達式的數據類型。
------------------------------------與引用不同的是,它準確的返回頂層const和引用