在哪些情況下要申明類型:
定義變量類型
函數返回值,函數參數
表達式返回變量類型
auto關鍵字原理
? ? ?在定義變量的時候必須申明類型,c++是強語言類型,在編譯階段需要知道類型,這樣的好處是程序效率更高,而動態語言不需要類型申明的需要自推導變量類型。使用了auto是不是c++效率會變慢?完全不是,因為在編譯階段編譯器已經幫程序員推導好了變量的類型。前提條件是編譯器可以根據當前的程序的狀態推導出變量類型。只是編譯器更加智能,我猜想編譯時間豈不更長了。我這里使用了visual studio 2013/2015,均已經支持大部分C++11的特性.
auto關鍵字使用場景
場景一,申明普通變量
auto num = 10;
場景二,函數返回值,如果沒有auto,總是要巧那么長的返回值,有了auto關鍵字后,是不是心里感覺很爽。
vector<string> str_vec;
vector<string>::iterator it_old = str_vec.begin();
auto it_new = str_vec.begin();
場景三,申明函數返回值
c++11:
auto add(int a, int b)->int { return a + b;
}
c++14已經去掉了煩人的->int,我已經在visual studio 2015中實驗。
auto add(int a, int b)
{return a + b;
}
auto使用需要注意的幾個問題
1、使用auto關鍵字的變量必須有初始值,編譯器才能推導出變量類型。
2、在傳遞const變量的時候,使用auto必須自己加const
const int a =10;
auto b = a; // b的類型是int
const auto c = a; // c 的類型是const int
3、關于很奇葩的函數返回值
auto關鍵字只能在函數的返回值使用auto關鍵字,并且在函數尾還需要標注返回類型
這樣看起來很奇葩,莫不如不用auto關鍵字,但我認為委員會的人沒這么閑,上google查了下,有下面兩條原因:
1、他們認為把返回值放在函數后面更好看(特別是返回值很長的時候)
2、C++14將會把討人煩得返回值去掉,編譯器直接支持自推導。
本文轉載自:《C++11 之auto》