C 11 auto與decltype關鍵字

2021-08-22 13:27:17 字數 2336 閱讀 5150

在我們程式設計時候常常需要把表示式的值賦給變數,需要在宣告變數的時候清楚的知道變數是什麼型別。然而做到這一點並非那麼容易(特別是模板中),有時候根本做不到。

為了解決這個問題,c++11新標準就引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式所屬的型別。和原來那些只對應某種特定的型別說明符(例如 int)不同。auto 讓編譯器通過初始值來進行型別推演。從而獲得定義變數的型別,所以說 auto 定義的變數必須有初始值。因此auto並非是一種「型別」的宣告,而是乙個型別宣告時的「佔位符」,編譯器在編譯期會將auto替換為變數實際的型別。

auto關鍵字:

1、在擁有初始化表示式的複雜型別變數宣告時的簡化:

//在擁有初始化表示式的複雜型別變數宣告時的簡化

void testauto()

; std::vector::iterator it = v.begin();

while (it != v.end())

cout << *it++ << " ";

cout << endl;

for (auto it = v.begin(); it != v.end(); ++it)

cout << *it << " ";

cout << endl;

}int main()

2、免除程式設計師在一些型別宣告時的麻煩,或者避免一些在型別宣告時的錯誤:

int main()

3、 auto的自適應性能夠在一定程度上支援泛型程式設計:

//auto的自適應性能夠在一定程度上支援泛型程式設計

templatedouble add(const t1& left, const t2& right)

int main()

結果如圖:

4、auto和指標一起使用的時候:

//auto和指標一起使用的時候

int main()

c++11中vector的簡單應用:

//vector的初始化

int main()

;//初始化列表(c++11)

vectorvd = ;

vectorve(va.begin(), va.end());//迭代器指定範圍初始化

return 0;

}//利用拷貝建構函式和swap函式可以實現賦值操作

int main()

; for (int i = 0; i < 10; i++)

va = vb;//vb拷貝給va

swap(va, vc);

for (auto x : vc)//輸出應該是va裡面的值

cout <> vvb(4, );

for (int i = 0; i != vvb.size(); i++)

for (auto bit = vvb.begin(); bit != vvb.end(); bit++)

system("pause");

return 0;

}//c++11中vector遍歷:

decltype推導的四個規則:

1、如果e是乙個沒有帶括號的標記符表示式或者類成員訪問表示式,那麼decltype(e)就是e所命名的實體的型別。此外如果e是乙個被過載的函式,則會編譯失敗。

2、標記符表示式:單個標記符對應的表示式即為標記符表示式。(除去關鍵字、字面常量等編譯器需要用到的標記)比如:int arr[3];arr為標記符表示式,但是arr[0] + 3和arr[3]就不是。

3、否則,假設e的型別是t,如果e是將亡值(比如臨時變數或者函式區域性變數)decltype(e)被推導為t&&,否則,假設e的型別是t,如果e是乙個左值,則decltype(e)為t的引用。否則,假設e的型別是t,則decltype(e)為t。

C 11 auto自動型別推導

1.auto型別推導auto x 5 正確,x是int型別 auto pi new auto 1 正確,批是int const auto v x,u 6 正確,v是const int 型別,u是const int static auto y 0.0 正確,y是double型別 auto int r ...

C 11 auto型別推斷和decltype

1.auto型別推斷 a.引入原因 程式設計時,經常需要將表示式的值賦給變數,這就要求我們在申明變數的時候,明確知道表示式的型別,然而要做到這一點並不容易,於是引入auto讓編譯器幫我們去做型別分析。b.使用注意事項const int const i 1,const ref const i auto...

C 11 auto和decltype關鍵字

可以用 auto 關鍵字定義變數,編譯器會自動判斷變數的型別。例如 auto i 100 i 是 int auto p new a p 是 a auto k 34343ll k 是 long long有時,變數的型別名特別長,使用 auto 就會很方便。例如 map mp for auto i mp...