在c++11
發布之前,c++
定義變數必須指定變數的型別,不像擁有「型別自動推斷」技術的語言,比如python。當c++11
發布後,c++
也擁有了「型別自動推斷」技術,即auto
關鍵字和decltype
關鍵字。我們在這裡描述auto
關鍵字的用法。
//變數
1.auto variable initializer //從其初始化器自動推導變數型別
//函式
2.auto function -> return type //從尾隨的返回型別推導,事實上這裡的auto只是語法作用,並不進行自動型別檢測。
3.auto function //從return語句推導
4.template
(c++17)//型別由對應使用的引數推導
#include
template
auto add(t t,u u) //返回型別是operator+(t,u)的型別。
//目前vs2017還不支援
template
auto f() -> std::pair;}
int main()
; //c的型別是std::initalizer_list
auto d=f<1>)(); //結構化繫結宣告 (vs2017不支援)
int &e=a;
auto g=e; //此時g的型別為int,而不是int&
const
int h=100;
auto i=h; //i的型別為int,而不是const int(去除const)
const
auto j=h; //j的型別此時為const int
//如果auto關鍵字帶上&號,則不去除const語意
auto &k=h; //k的型別為const int
auto l[3]=;
auto m=l; //m的型別為int*
//若表示式為陣列且auto帶上&,則推導型別為陣列型別。
auto &n=l; //n的型別為int[3]
}
auto
定義變數一定要進行初始化。
如果初始化表示式是引用,則去除引用語義。
如果初始化表示式為const
或volatile
(或者兩者兼有),則除去const/volatile
語義。
初始化表示式為陣列時,auto
關鍵字推導型別為指標。
函式的引數不能使用auto
,在不支援c++17
標準的編譯器上模板引數也不能使用auto
。
c 11新特性之auto
在早期版本中,auto關鍵字用來宣告具有自動儲存器的區域性變數,auto關鍵字很少被使用,除了靜態變數之外,其它的變數預設是auto的。因此,在c 11中,刪除了原有的功能,並對其重新設計,增加了auto的型別推導功能。template double add t1 a,t2 b int main i...
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用於宣告變數為自動變數,自動...