文章** 鏈結
程式設計是常常需要把表示式的值賦給變數,這就要求子再宣告變數的時候清楚知道表示式的型別,然而要做到這一點並不容易,有時候根本做不到。為了解決問題,c++11標準引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式的型別。
與原來那些型別說明符不同,auto讓編譯器通過初始值來推算變數型別。顯然,auto定義的變數必須要有初始值。
使用auto
具有以下好處:
可靠性:如果表示式的型別發生更改,也能工作。
效能:確保不會進行轉換。
效率:**變得高效。
可用性:不必擔心型別名稱拼寫困難和拼寫有誤。
auto it=val1+val2;///有val1和val2相加的結果推斷it的型別。
auto i=0,*p=&i;///i是整數,p是整型指標
使用auto
能在一條語句宣告多個變數。但是一條語句只能有乙個基本資料型別,所以該語句中所有變數的初始基本資料型別都必須一致:
auto it=0,pp=3.14
///錯誤
編譯器推斷出的auto
型別有時候和初始值型別並不完全一樣,編譯器會適當地改變結果型別使其更符合初始化規則,例如:
int
count =10 ;
int &countref = count ;
auto myauto = countref;
countref=11;
cout<<<" "; //print 11
myauto =12;
cout<
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,此時原來的初始化規則仍然適用:
auto &g = ci ; ///g是乙個整型常量引用,繫結到ci
auto &h = 42;/// 錯誤,不能為非常量引用繫結字面值
const auto &j = 42;/// 可以為常量引用繫結字面值
切記,符號 * 和 & 只能從屬於某乙個宣告,而非基本資料型別的一部分,因此初始值必須是同乙個型別:
auto k = ci, &l = i;///k是整數,l是整型引用
auto &m = ci, *p = &ci;///m是對整型常量的引用,p是指向整型常量的指標
auto &n = i,*pp = &ci;///錯誤!i的型別是int,而&ci的型別是const int
c auto型別說明符
程式設計是常常需要把表示式的值賦給變數,這就要求子再宣告變數的時候清楚知道表示式的型別,然而要做到這一點並不容易,有時候根本做不到。為了解決問題,c 11標準引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式的型別。與原來那些型別說明符不同,auto讓編譯器通過初始值來推算變數型別。顯然,...
C auto和decltype型別說明符
c auto和decltype型別說明符 有時候我們定義帶初始值的變數時,不知道或難以確定表示式的型別,我們可以用auto或decltype型別說明符,讓編譯器根據表示式自動推斷變數的型別。例如,我們不知道或難以確定val1和val2的型別,或者不知道它有沒有重新定義加法,使得結果型別改變,我們可以...
auto型別說明符
c 11新標準引入了auto型別說明符 用它能讓編譯器替我們分析表示式所屬的型別 auto讓編譯器通過初始值來推算出標量的型別。顯然auto定義的變數必須有初始值 auto item vall val2 item的型別通過val2和val1的相加的結果得出 使用auto也能在一條語句中宣告多個變數 ...