關於auto和decltype

 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和引用



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章