c 11新特性之auto

2021-08-17 04:43:44 字數 1078 閱讀 5843

在早期版本中,auto關鍵字用來宣告具有自動儲存器的區域性變數,auto關鍵字很少被使用,除了靜態變數之外,其它的變數預設是auto的。因此,在c++11中,刪除了原有的功能,並對其重新設計,增加了auto的型別推導功能。

template

double add( t1 a, t2 b)

int main(int argc, char** argv)

; auto it = vec.begin();

for (; it < vec.end(); it++)

return

0;}

在以上程式中,只需要用auto宣告it即可,不像之前這麼宣告:

vector

::iterator it = vec.begin();

減少了**量,增加了可讀性。

同時auto也支援泛型程式設計,在模板函式中,可以用auto 宣告返回結果,而不必宣告型別,當然函式的引數傳得是否有效,亦或t1和t2的加法是合法的。

auto也有侷限性,比如:

1、函式引數不能用auto定義形參型別,像下面的這種方式定義函式肯定是編譯不通過的。

double add( auto& _a, auto& _b )

2、auto不能推導非靜態成員變數的型別,因為auto是在編譯時期進行推導,像以下的使用會報此處不允許使用「auto」。

class

dog

3、auto必須要初始化,不然不能進行型別推導。

auto i ;//wrong

auto i = 9;//correct

4、auto 不能用於宣告陣列,否則無法通過編譯,報auto型別不能出現在頂級陣列型別中;

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 是一種強型別語言,宣告變數時必須明確指出其型別。但是,在實踐中,優勢我...