筆者序
在[2-x-x]中瓤鼻,我們介紹的C++11特性多是對舊規(guī)范中“盲點”的覆蓋辜膝,一部分“盲點”在自定義的數(shù)據(jù)類型和函數(shù),比如自定義字面量飞蛹、POD類型谤狡、類型轉換,另一部分“盲點”在模板編程卧檐,比如inline namespace墓懂、using模板別名,看上去比較瑣碎霉囚。
而在本章[3-x-x]捕仔,我們會介紹C++11中提升易用性的三大新特性,auto盈罐、decltype榜跌、范圍for循環(huán)。這是對原有寫法的簡化盅粪,不是給你一把新武器钓葫,而是給原武器進行了升級,變得更趁手了票顾。與之相對础浮,再往后幾章會講的強類型枚舉、智能指針與垃圾回收奠骄、變長模板豆同、lambda函數(shù)等,都是新武器含鳞。
右尖括號>的改進
說的是在C++98中影锈,二連右尖括號會被解釋成運算符右移,如果要表示模板套模板,需要在兩個括號之間加個空格精居,而這個限制在C++11中取消了。比如下面的程序潜必,C++11編譯通過靴姿,C++98 x2那行編譯失敗。
template <int i> class X{};
template <class T> class Y{};
int main() {
Y<X<1> > x1;
Y<X<2>> x2;
}
// C++98會報錯
// cpp.cpp:5:13: error: template argument 1 is invalid
// cpp.cpp:5:7: error: template argument 1 is invalid
// Y<X<2>> x2;
我覺得這個特性應該放在前一章介紹磁滚,不該在這一章佛吓,所以放在兩章之間的序中一筆帶過。