今天舊事重提,再寫一點關於c++11的事兒,注意是說明一下使用C++11使你的程序更加的簡潔,更加漂亮。
說道簡潔,我想最多想到的就是auto關鍵字的使用了。
比如之前你這樣定義一個迭代器:
std::vector::iterator iter = vec.begin();
但是有了auto關鍵字,你就可以少些很多代碼:
auto iter = vec.begin();
好吧,你可能早就不耐煩了,因為你早就非常熟悉auto關鍵字了。
別著急看看下面的!
1使用auto推斷的變量必須馬上初始化
auto不能推斷出下面兩個變量
auto int y;
auto s;
2 auto可以推斷new出來的變量
auto ptr = new auto(1);//ptr為int*類型
3 能分清下面的推斷嗎
int x = 1;
auto *a = &x;//a為int
auto b = &x; //b為int*
auto & c = x;//c為int
auto d = c; //d為int
const auto e = x;//e為 const int
auto f = e; //f為int
const auto& g=x; //g為const int&
auto& h=g; //h為const int&
需要說明的是:
表達式帶有const時,auto推斷會拋棄const,f為int,非const int
auto與引用結合,表達式帶有const時,auto推斷保留const屬性,例如h為const int &
4 auto無法定義數組、無法推斷模板參數
5 編譯時,推導出一個表達式的類型,auto做不到,這時候有關鍵字decltype
int x = 1;
decltype(x) y = 1;//y為int類型
6 decltype與auto相比,可以保留const
const int& i = x;
decltype(i) j = Y;//j為const int &類型
7 兼揉並濟,auto與decltype的結合
template
auto func(T& val)->decltype(foo(val))
{
return foo(val);
}