C 新特性之auto指定符

2021-08-27 18:57:21 字數 1524 閱讀 1110

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定義變數一定要進行初始化。

如果初始化表示式是引用,則去除引用語義。

如果初始化表示式為constvolatile(或者兩者兼有),則除去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用於宣告變數為自動變數,自動...