笔者序
在[2-x-x]中,我们介绍的C++11特性多是对旧规范中“盲点”的覆盖,一部分“盲点”在自定义的数据类型和函数,比如自定义字面量、POD类型、类型转换,另一部分“盲点”在模板编程,比如inline namespace、using模板别名,看上去比较琐碎。
而在本章[3-x-x],我们会介绍C++11中提升易用性的三大新特性,auto、decltype、范围for循环。这是对原有写法的简化,不是给你一把新武器,而是给原武器进行了升级,变得更趁手了。与之相对,再往后几章会讲的强类型枚举、智能指针与垃圾回收、变长模板、lambda函数等,都是新武器。
右尖括号>的改进
说的是在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;
我觉得这个特性应该放在前一章介绍,不该在这一章,所以放在两章之间的序中一笔带过。