最近再看C++primer 5th,正好總結一下decltype和auto的用法,方便複習
auto定義的變量必須有初始值
使用auto可以在一條語句聲明多個變量,但一條聲明語句只能有一個基本數據類型
auto i=0,*p=&i;
auto sz=0,pi=3.2; //錯誤 sz和pi類型不一致
真正參與初始化的其實是引用對象的值,編譯器以引用對象的類型作爲auto的類型
int i=0,&r=i;
auto a=r; //a是int整數
auto一般會忽略頂層const,底層const保留下來int i=0;
const int ci=i,&cr=ci;
auto b=ci; //int 忽略頂層
auto c=cr; //int
auto d=&i; //*int
auto e=&ci; //const *int 對 常量取地址是底層
const
設置auto引用時,頂層常量屬性仍然保留const int ci=9;
auto &m=ci,*p=&ci; //m常量引用,p指向常量的指針
decltype處理頂層const和引用的方式與auto有些不同
引用從來都是作爲所指對象的同義詞出現,只有用在decltype處是個例外
const int ci=0,&cj=ci;
decltype(ci) x=0; //const int
decltype(cj) y=x; //const int &
另一些特殊情況
int i=2,*p=&i,&r=i;
decltype(r+0) b; //int
decltype(*p) c; //c是int&,必須初始化
還有一個
decltype((i)) d; //d是int&
加雙括號的是引用類型
就這麼多把