A.4 针对C++03的完善

而谈及兼容性的话,除了上面列举的C++11与C++03、ISO C以及C11的区别外,在C++11起草的过程中,也包含了一些对以前标准(C++03)的修改和完善。我们把一些针对C++03的完善也列举了出来。

条目1.和->操作符的第二个参数不再要求是一个完全类(complete class),即包含了全部声明体的类型。

条目2 内存释放函数不因抛出异常而终止。

条目3 C++03要求,当第一个参数是空指针(null pointer)的时候,内存释放函数(如用户自定义的delete操作符)相当于无任何作用。现在不再有这样的限制。

条目4 如果typeid操作符的参数是cv修饰的,其结果是对应的无cv修饰的类型。

条目5 在常量表示式中可以使用throw,如:const char*s=(n==m)?throw“bad”:“ok”;在C++11中是合法的表达式。

在C++11中,这样的改进还有很多。更多的信息读者可以参考以下链接:http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html。