《C++primer(第五版)》学习之路-第十八章:用于大型程序的工具

 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:[email protected]


18.1 异常处理


1.异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理。异常使得我们能够将问题的检测与解决过程分离开来。程序的一部分负责检测问题的出现,然后解决该问题的任务传递给程序的另一部分。检测环节无需知道问题处理模板的所有细节,反之亦然。


2.一个异常如果没有被捕获,则它终止当前的程序。


3.除了一些极细小的差别外,要求异常的类型和catch的类型时精确匹配的:

⑴允许从非常量向常量的类型转换,也就是说,一条非常量对象的throw语句可以匹配一个接受常量引用的catch语句。

⑵允许从派生类向基类的类型转换

⑶数组被转换成指向数组(元素)类型的指针,函数被转换成指向该函数类型的指针。


4.要想处理构造函数初始值抛出的异常,我们必须将构造函数写成函数try语句块的形式。函数try语句块使得一组catch语句技能处理构造函数体,也能处理构造函数的初始化过程。

关键字try出现在表示构造函数初始值列表的冒号以及表示构造函数体的花括号之前。与这个try关联的catch既能处理构造函数体抛出的异常,也能处理成员初始化列表抛出的异常。

在初始化构造函数的参数时也可能发生异常,这样的异常不属于函数try语句块的一部分。函数try语句块只能处理构造函数开始执行后发生的异常。和其他函数调用一样,如果在参数初始化的过程中发生了异常,则该异常属于调用表达式的一部分,并将在调用者所在的上下文中处理。


5.我们通过提供noexcept说明指出某个函数不会抛出异常。其形式是关键字noexcept紧跟在函数的参数列表后面,用以标识该函数不会抛出异常。


18.2 命名空间


1.全局作用域中定义的名字也就是定义在全局命名空间中,全局命名空间以隐式的方式声明,并且在所有程序中都存在,全局作用域中定义的名字被隐式地添加到全局命名空间中。

作用域运算符同样可以用于全局作用域的成员,因为全局作用域是隐式的,所以它并没有名字。

::member_name表示全局命名空间中的一个成员。


2.未命名的命名空间是指关键字namespace后紧跟着花括号括起来的一系列声明语句。未命名的命名空间中定义的变量拥有静态生命周期:它们在第一次使用前创建,并且直到程序结束才销毁。


18.3 多重继承与虚继承


1.多重继承是指从多个直接基类中产生派生类的能力。多重继承的派生类继承了所有父类的属性。


2.虚继承的目的是令某个类做出声明,承诺愿意共享它的基类。其中,共享的基类子对象成为虚基类。在这种机制下,不论虚基类在继承体系中出现了多少次,在派生类中都只包含唯一一个共享虚基类子对象。


3.虚基类总是先于非虚基类构造,与它们在继承体系中的次序和位置无关。

你可能感兴趣的:(《C++primer(第五版)》学习之路-第十八章:用于大型程序的工具)