auto 可以自動推理資料型別。
使用語法如下:
#include#includeusing
namespace
std;
intmain()
;
//auto c;
//定義乙個auto的系列的變數必須始終推倒成同一型別
auto x1, x2;
//auto a, b;
//如果初始化表示式是引用或const,則去除引用或const語義
int&q;
auto m ;
cout
<<"
type of m:
"<< typeid(m).name() int m = 400
; cout
<< "
q :
"<< q << "
m :
"<< m
int n;
auto t ;
cout
<<"
type of t:
"<< typeid(t).name() int t = 300
; cout
<<"
t :
"<< t /如果auto關鍵字加上&,則不去除引用或const語意
char ch1, &ch2;
auto&ch3;
cout
<<"
type of ch3:
"<< typeid(ch3).name() char&
ch3 = 'b'
; cout
<<"
ch1 :
"<"
ch2 :
"<"
ch3:
"const
double h ;
auto&k ;
cout
<< "
type of k:
"const double
//k = 12.0;
//如果初始化為陣列,auto自動推倒為指標
int arr[3];
auto p ;
cout
<<"
type of p:
"int*
cout<<"
size of arr:
"
<<"
size of p:
"/如果加上&,則推導為陣列
auto&px;
cout
<<"
type of px:
"a3_i
cout<<"
size of px:
"/c++14可以用auto來推倒函式返回值
return0;
}
注:auto不能用來定義陣列或函式形參。
第一種經典場景:當變數的資料型別很複雜或者寫起來很麻煩,我們懶得打字了,其實是為了加快程式設計效率。
listc;list
::iterator ite;
ite =find(c.begin(), c.end(), target);
//代替為下面
listc;
auto ite = find(c.begin(), c.end(), target);
第二種經典場景: 當我們有時不確定函式返回值型別時, 或者說用auto來推理函式返回值型別。
templateauto func(t a, t b)intmain()
(1)不能作為函式引數使用。因為只有在函式呼叫的時候才會給函式引數傳遞實參,auto 要求必須要給修飾的變數賦值,因此二者矛盾。
int func(auto a, auto b) //error
(2)不能用於類的非靜態成員變數的初始化
classtest
(3)不能使用 auto 關鍵字定義陣列
intfunc()
; //
定義陣列
auto t1 = array; //
ok, t1被推導為 int* 型別
auto t2 = array; //
error, auto無法定義陣列
auto t3 = ;; //
error, auto無法定義陣列
}
(4)無法使用 auto 推導出模板引數
template structtest{}
intfunc()
C 11特性 auto關鍵字
正文 本文的內容已經不新鮮了。關於auto,翻來覆去被人知道的都是這些東西,本文並沒有提出新穎的auto用法。本人原是痛恨部落格一篇篇都是copy而來缺乏新意的探索,當然,本文不是copy而來,但發布這樣一篇大家皆知的文章心裡甚是惶恐。本文對auto的內容加以整理,權當是自己的複習筆記了。回到頂部 ...
C 11特性 auto關鍵字
本文的內容已經不新鮮了。關於auto,翻來覆去被人知道的都是這些東西,本文並沒有提出新穎的auto用法。本人原是痛恨部落格一篇篇都是copy而來缺乏新意的探索,當然,本文不是copy而來,但發布這樣一篇大家皆知的文章心裡甚是惶恐。本文對auto的內容加以整理,權當是自己的複習筆記了。早在c 98標準...
C 11新特性 auto關鍵字
熟悉指令碼語言的人都知道,很多指令碼語言都引入了 型別自動推斷 技術 比如python,可以直接宣告變數,在執行時進行型別檢查。隨著c 11標準的發布,c 語言也引入了型別自動推斷的功能,這就是我們今天要介紹的auto關鍵字。c 是一種強型別語言,宣告變數時必須明確指出其型別。但是,在實踐中,優勢我...