1.何時使用?
如果我們想定義一個和某個運算式型別一致的變數:
比如,表示式為字面值3.14(編譯器默認浮點型字面值為double型別),則可以這么定義
double i=3.14;
試想等號右邊型別我們能否一直獲取的到呢?或者十分清楚呢?答案自然是否定的,
比如,我們定義一個string類的物件
string a="sss";
cout<<a.size();
請問a.size()是什么型別?int ?unsigned?都不是,其實string類物件的成員函式size(),它的回傳值的型別是string::size_type,
由于某些運算式的型別我們搞不清,或者壓根無法獲取,但是我們卻又需要使用該型別時,這時可以請出我們的救星:auto型別關鍵字和decltype型別指示符
auto i=a.size();//宣告時,必須初始化,
decltype(a.size) j;//可以只宣告,不初始化,
2.auto型別關鍵字的使用
1. auto型別關鍵字的作用
c++11新標準引入了auto型別關鍵字,用它就能讓編譯器替我們去分析運算式所屬的型別,比如:
auto item=val1+val2/*編譯器根據val1和val2相加的結果推斷出item的型別
并且以它們相加的值對item進行初始化*/
注意!注意!注意!
一條宣告陳述句中的變數型別一定是相同的,在一條宣告陳述句中進行多變數的宣告時,一定確保初始的基本資料型別一致(注意 “&”和“*” 不是型別,只是型別的修飾符)切忌犯以下的錯誤
auto size=0,pi=3.14;//錯誤大大的!!!
由于宣告陳述句只含有一個變數型別auto,它同時作用size和pi,在前半部分編譯器會根據0,推斷出auto是int,后半部分編譯器會根據3.14推斷出auto是double,前后矛盾,所以錯誤,
2. auto和初始值型別不一樣的情況
當auto遇到初始值型別為復合型別(指標和參考)、常量時,編譯器推測的結果和初始值型別并不會完全一致,
(1)當初始值為參考型別時
例1:
int i=0,&r=i;
auto j=r;//此時j為整型
為什么會是整形呢?因為對參考進行的操作相當于對參考所系結的物件進行操作,即用r初始化j就相當于用i初始化j所以得到的是整形,
(2) auto會忽略掉頂層const,底層const保留
例2:
const int ci=i,&cr=ci;
auto a=ci;//a是整型,頂層const被忽略掉
auto b=cr;//b是整形,使用cr相當于使用ci,此時會忽略掉頂層const
auto c=&i;//c為一個指向整形變數的指標
auto d=&ci;//d為一個指向整形常量的指標,對常量物件取地址,是一種底層cosnt
(3) 設定一個auto型別的參考時,初始值中的頂層常量const會保留,
例3:
auto &e=ci;//e是對常量物件的參考
(4) 以下也是需要注意的地方
auto &f=1;//錯誤,如果不是對常量的參考不能系結字面值
const &g=42;//此時正確
關于decltype指示關鍵字以后再更,如有錯誤請批評指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/258468.html
標籤:其他
上一篇:微信小程式云開發動態制作小程式碼
