第十八章 用于大型程序的工具
1. throw类似return,后面的语句不再执行。
2.如果一个异常没有被捕获,将终止当前程序。
3.析构函数不该抛出它不能处理的异常。
4.异常对象。抛出指针的对象必须存在,没有销毁。
5.匹配的catch语句是最靠前的第一个匹配的,它不一定是最优的。
6.catch语句中可以重新抛出异常对象,throw。
7.catch(...)可以捕获所有类型异常。
8.处理构造函数初始值异常的唯一方法是讲构造函数写成函数try语句块。
9.noexcept异常说明。编译器在编译时无法验证异常说明。
10.noexcept可以有两层含义:异常说明符或者运算符。
11.函数指针和其指向的函数必须有一致的异常说明。
12.异常类的层次。
13.命名空间污染。
14.命名空间结束后无需分号,类似块。
15.每个命名空间都是一个作用域。
16.命名空间可以是不连续的。
17.内联命名空间。
18.未命名的命名空间。可以直接使用,且仅在当前文件内有效,作用范围不会横跨多个文件。可以取代静态声明。
19.命名空间的别名;using声明(一个成员);using 指示(所有成员)。
20.多重继承,从多个直接基类中产生派生类。
21. 有可能出现派生类从两个或多个基类中继承同名成员的情况,此时需要加前缀限定符。
22. 虚继承:无论虚基类在继承体系中出现几次,在派生类中都只包含唯一的一个共享的虚基类子对象。
23.虚派生只影响从指定虚基类的派生类中进一步派生出的类,它不会影响派生类本身。
24.解决二义性问题的最好方法是在派生类中为成员自定义新实例。
25.虚派生中的构造函数顺序:先虚基类,再非虚基类构造,最后派生类自己。