在早期版本中,auto關鍵字用來宣告具有自動儲存器的區域性變數,auto關鍵字很少被使用,除了靜態變數之外,其它的變數預設是auto的。因此,在c++11中,刪除了原有的功能,並對其重新設計,增加了auto的型別推導功能。
在以上程式中,只需要用auto宣告it即可,不像之前這麼宣告:template
double add( t1 a, t2 b)
int main(int argc, char** argv)
; auto it = vec.begin();
for (; it < vec.end(); it++)
return
0;}
減少了**量,增加了可讀性。vector
::iterator it = vec.begin();
同時auto也支援泛型程式設計,在模板函式中,可以用auto 宣告返回結果,而不必宣告型別,當然函式的引數傳得是否有效,亦或t1和t2的加法是合法的。
auto也有侷限性,比如:
1、函式引數不能用auto定義形參型別,像下面的這種方式定義函式肯定是編譯不通過的。
2、auto不能推導非靜態成員變數的型別,因為auto是在編譯時期進行推導,像以下的使用會報此處不允許使用「auto」。double add( auto& _a, auto& _b )
3、auto必須要初始化,不然不能進行型別推導。class
dog
4、auto 不能用於宣告陣列,否則無法通過編譯,報auto型別不能出現在頂級陣列型別中;auto i ;//wrong
auto i = 9;//correct
auto arr[8] =;
5、auto不能作為模板引數(例項化時), 否則無法通過編譯。
vector
vec = ; // wrong
c 11新特性(1)之auto
auto這是乙個很小的語法,就是讓編譯器自動推測物件的型別,需要注意的是一定要保證編譯器可以推測出此物件的型別,不能出現模稜兩可的情況。不過話又說回來對於c 來說,時刻清除物件的型別,恐怕是讀懂程式的基礎,auto只是一種偷懶的做法,平時自己寫 的時候,不建議使用,能看懂別人寫的 就行。下面附乙個小...
C 11新特性之一 auto
c 是一門偉大的語言,永遠給程式設計師最大的設計自由,未使用的特性從不產生 新版本永遠完全相容舊版本。c 11先前被稱作c 0x,即iso iec 14882 2011,是c 程式語言的乙個標準。c 98 auto 早在c 98標準中就存在了auto關鍵字,那時的auto用於宣告變數為自動變數,自動...
C 11新特性 auto關鍵字
熟悉指令碼語言的人都知道,很多指令碼語言都引入了 型別自動推斷 技術 比如python,可以直接宣告變數,在執行時進行型別檢查。隨著c 11標準的發布,c 語言也引入了型別自動推斷的功能,這就是我們今天要介紹的auto關鍵字。c 是一種強型別語言,宣告變數時必須明確指出其型別。但是,在實踐中,優勢我...