亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ auto類型說明符

2020-05-23 14:07:21
字體:
來源:轉載
供稿:網友
在C++11中引入了auto類型說明符,用它就能讓編譯器替我們去分析表達式所屬的類型。當然,auto變量必須有初始值,這樣編譯器才能推斷其類型
 

編程時常常需要把表達式的值賦給變量,這就要求在聲明變量的時候清楚知道表達式的類型。然而要做到這一點并非那么容易,有時候甚至根本做不到。為了解決這個問題,C++11標準引入了auto類型說明符,用它就能讓編譯器替我們去分析表達式所屬的類型。

與原來那些只對應一種特定類型的說明符不同,auto讓編譯器通過初值來推算變量類型。顯然,auto定義的變量必須要有初始值。

使用auto具有以下幾點好處:

可靠性:如果表達式的類型發生更改(包括函數返回值發生更改的情況),它也能工作。
性能:確保將不會進行轉換。
可用性:不必擔心類型名稱拼寫困難和拼寫有誤。
效率:代碼會變得更高效。

auto item = val1 + val2; // 由val1和val2相加的結果推斷出item的類型auto i=0, *p = &i; // i是整數,p是整型指針

使用auto能在一條語句中聲明多個變量。但是一條聲明語句只能有一個基本數據類型,所以該語句中所有變量的初始基本數據類型都必須一致:

auto sz = 0, pi = 3.14; // Error!

編譯器推斷出的auto類型有時候和初始值的類型并不完全一樣,編譯器會適當地改變結果類型使其更符合初始化規則,例如:

使用auto會刪除引用

int count = 10;int& countRef = count;auto myAuto = countRef;countRef = 11;cout << count << " "; // print 11myAuto = 12;cout << count << endl; // print 11

你可能會認為 myAuto 是一個 int 引用,但它不是。它只是一個 int,因為輸出為 11 11,而不是 11 12;如果 auto 尚未刪除此引用,則會出現此情況。

const限定符 
先引入一種表述:頂層const表示指針本身是個常量,底層const表示指針所指的對象是一個常量。一般auto會忽略掉頂層const,同時底層const則會保留下來,例如:

int i = 0;const int ci = i, &cr = ci;auto b = ci; // b 是一個整數(ci的頂層const特性被忽略掉)auto c = cr; // c 是一個整數(cr是ci的別名,ci本身是一個頂層const)auto d = &i; // d 是一個整型指針(整數的地址就是指向整數的指針)auto e = &ci; // e 是一個指向整數常量的指針(對常量對象取地址是一種底層const)

如果希望推斷出的auto類型是一個頂層const,需要明確指出:

const auto f = ci; // ci 的推演類型是int,f是const int類型

還可以將引用的類型設置為auto,此時原來的初始化規則仍然適用:

auto &g = ci; // g是一個整型常量引用,綁定到ciauto &h = 42; // Error: 不能為非常量引用綁定字面值const auto &j = 42; // OK: 可以為常量引用綁定字面值

切記,符號*和&只從屬于某個聲明,而非基本數據類型的一部分,因此初始值必須是同一類型:

auto k = ci, &l = i; // k是整數,l是整型引用auto &m = ci, *p = &ci; // m是對整型常量的引用,p是指向整型常量的指針auto &n = i, *p2 = &ci; // Error: i的類型是int,而&ci的類型是const int

附上更多示例代碼:

下面的聲明等效。在第一個語句中,將變量j 聲明為類型 int。在第二個語句中,將變量 k 推導為類型 int,因為初始化表達式 (0) 是整數

int j = 0; // Variable j is explicitly type int.auto k = 0; // Variable k is implicitly type int because 0 is an integer.

以下聲明等效,但第二個聲明比第一個更簡單。使用 auto 關鍵字的最令人信服的一個原因是簡單

map<int,list<string>>::iterator i = m.begin(); auto i = m.begin(); 

使用 iter 和 elem 啟動循環時

#include <deque>using namespace std;int main(){  deque<double> dqDoubleData(10, 0.1);  for (auto iter = dqDoubleData.begin(); iter != dqDoubleData.end(); ++iter)  { /* ... */ }  // prefer range-for loops with the following information in mind  // (this applies to any range-for with auto, not just deque)  for (auto elem : dqDoubleData) // COPIES elements, not much better than the previous examples  { /* ... */ }  for (auto& elem : dqDoubleData) // observes and/or modifies elements IN-PLACE  { /* ... */ }  for (const auto& elem : dqDoubleData) // observes elements IN-PLACE  { /* ... */ }}

下面的代碼片段使用 new 運算符和指針聲明來聲明指針

double x = 12.34;auto *y = new auto(x), **z = new auto(&x);

下一個代碼片段在每個聲明語句中聲明多個符號。請注意,每個語句中的所有符號將解析為同一類型。

auto x = 1, *y = &x, **z = &y; // Resolves to int.auto a(2.01), *b (&a);     // Resolves to double.auto c = 'a', *d(&c);     // Resolves to char.auto m = 1, &n = m;      // Resolves to int.

此代碼片段使用條件運算符 (?:) 將變量 x 聲明為值為 200 的整數:

int v1 = 100, v2 = 200;auto x = v1 > v2 ? v1 : v2;

下面的代碼片段將變量 x 初始化為類型 int,將變量 y初始化對類型 const int 的引用,將變量 fp 初始化為指向返回類型 int 的函數的指針。

int f(int x) { return x; }int main(){  auto x = f(0);  const auto & y = f(1);  int (*p)(int x);  p = f;  auto fp = p;  //...}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久综合免费视频| 韩日精品中文字幕| 日韩中文字幕在线视频播放| 亚洲成人av中文字幕| 欧美日韩国产一区在线| 日韩欧美国产骚| 欧美激情伊人电影| 日韩免费在线免费观看| 亚洲精品综合精品自拍| 国内精品一区二区三区| 91欧美精品成人综合在线观看| 97久久久免费福利网址| 岛国精品视频在线播放| 91久久精品在线| 久久精品国产亚洲精品| 国产精品高清免费在线观看| 久久人人爽人人爽人人片av高清| 国产精品免费久久久久久| 97精品国产91久久久久久| 国产日韩欧美夫妻视频在线观看| 欧美精品在线免费播放| 久久香蕉国产线看观看网| 欧美日韩激情网| 日韩欧美亚洲范冰冰与中字| 91欧美精品午夜性色福利在线| 国产日韩欧美电影在线观看| 国产91精品久久久久久| 亚洲a级在线观看| 91久久国产综合久久91精品网站| 国产自摸综合网| 中文字幕av一区中文字幕天堂| 亚洲一区二区三区成人在线视频精品| 久久69精品久久久久久久电影好| 一区二区亚洲精品国产| 久久手机精品视频| 久久精品视频导航| 亚洲最新av在线| 久久777国产线看观看精品| 青青草精品毛片| 一区二区三区 在线观看视| 日韩高清有码在线| 91在线视频一区| 亚洲国产高潮在线观看| 精品国模在线视频| 国产精品色午夜在线观看| 欧美日韩免费观看中文| 性色av一区二区三区在线观看| 精品国偷自产在线视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美成在线观看| 国产精品久久久久久一区二区| 另类图片亚洲另类| 中文字幕欧美在线| 91亚洲精品久久久久久久久久久久| 亚洲成人动漫在线播放| 2019国产精品自在线拍国产不卡| 日韩精品久久久久久福利| 欧美www视频在线观看| 精品国产31久久久久久| 日韩亚洲一区二区| 中文字幕亚洲欧美在线| 久久网福利资源网站| 精品国产一区二区三区久久狼5月| 91av在线免费观看| 亚洲国产高清福利视频| 欧美另类在线播放| 久久久久久午夜| 亚洲电影免费在线观看| 亚洲色图在线观看| 国产精品久久久久秋霞鲁丝| 日本精品久久中文字幕佐佐木| 最新国产成人av网站网址麻豆| 中文字幕日韩专区| 欧美日韩国产中字| www日韩欧美| 成人免费午夜电影| 国内精品久久久久伊人av| 国语自产精品视频在线看抢先版图片| 欧美老女人www| 97精品视频在线| 亚洲视频电影图片偷拍一区| 欧美理论电影网| 日韩高清欧美高清| 亚洲va久久久噜噜噜| 精品国产欧美一区二区三区成人| 成人欧美一区二区三区黑人孕妇| 国产精品视频导航| 欧美中文在线字幕| 91国产视频在线| 奇米四色中文综合久久| 成人午夜高潮视频| 久久夜色精品国产欧美乱| 欧美激情手机在线视频| 国模私拍视频一区| 久久九九热免费视频| 国产精品视频xxxx| 亚洲人成五月天| 最近更新的2019中文字幕| 在线观看国产欧美| 2018中文字幕一区二区三区| 国产欧美中文字幕| 97久久精品视频| 欧美精品久久久久a| 日韩久久免费电影| 亚洲网站在线观看| 92版电视剧仙鹤神针在线观看| 一本色道久久88综合日韩精品| 国产精品主播视频| 97国产精品视频人人做人人爱| 日韩欧美精品网址| 91免费的视频在线播放| 欧美国产日韩中文字幕在线| 91香蕉嫩草影院入口| 午夜免费久久久久| 精品亚洲一区二区三区在线观看| 亚洲精品97久久| 91tv亚洲精品香蕉国产一区7ujn| 久久久久久久一| 精品中文字幕乱| 欧美另类在线观看| 久久久久中文字幕| 亚洲欧美另类在线观看| 在线观看日韩专区| 高清欧美电影在线| 亚洲精品国产拍免费91在线| 亚洲qvod图片区电影| 国产精品1234| 久久久久久欧美| 色777狠狠综合秋免鲁丝| 中文日韩在线观看| 国产精品久久在线观看| 日韩在线视频线视频免费网站| 久久全国免费视频| 91最新国产视频| 伊人久久久久久久久久久| 精品久久久久久亚洲精品| 九九热最新视频//这里只有精品| 国产精品吴梦梦| 国内精品一区二区三区四区| 欧美第一淫aaasss性| 国产视频精品自拍| 亚洲欧洲国产一区| 欧美成人精品三级在线观看| 亚洲精品视频免费| 久久精品色欧美aⅴ一区二区| 国产亚洲精品久久久久动| 久久久精品日本| 欧洲亚洲免费在线| 国产精品美女久久久久av超清| 这里精品视频免费| 欧美大尺度激情区在线播放| 91久久综合亚洲鲁鲁五月天| 亚洲精品黄网在线观看| 欧美性生交大片免费| 欧美综合第一页| 丰满岳妇乱一区二区三区| 97精品国产97久久久久久免费| 欧美性猛交xxxx乱大交蜜桃| 91精品国产高清自在线| 久久97久久97精品免视看| 日韩天堂在线视频| 精品自拍视频在线观看| 久久99热这里只有精品国产| 国产精品aaa|