1.5 规范类型
存在这样一组过程,如果把它们包含到一个类型的计算基中,就能方便地把对象放入各种数据结构,或者通过算法把对象从一个数据结构复制到另一数据结构.我们称具有这样的基的类型为规范的(regular),因为使用这样的类型可以保证程序行为的规范性,进而获得类型之间的互操作性.1 可以从内部类型,如bool、int,以及限制到良形式值的double,看到规范类型的语义.一个类型是规范的,当且仅当它的基包含了相等检查、赋值、析构操作、默认构造操作、拷贝构造操作、一个全序判断2 和一个基础类型. 3
相等判断是一个过程,它以同类型的两个对象为参数,当且仅当两个对象的状态相等时返回真.同样应该定义不等判断,它应返回相等判断的否定.我们使用下面记法:
赋值(assignment)是一个过程,它以同类型的两个对象为参数,使得第一个对象等于第二个,但并不修改第二个对象.赋值的意义不依赖于第一个对象的初值.我们使用下面记法:
析构操作(destructor)是一个过程,它结束一个对象的存在.对一个对象调用析构操作之后,就不能再将任何过程作用于它,而且它以前的存储位置和资源都可以用于其他用途了.析构操作经常被隐式地调用.全局对象在应用程序
1.虽然规范性是STL的设计基础,其正式定义最早出现在文献DehnertandStepanov[2000]中.
2.严格的说法要到第4章才能说清楚,它可以是一个全序,或者一个默认的全序.
3.基础类型在第12章定义.
终止时销毁(析构),局部对象在它们声明所在的块退出时销毁,数据结构的元素在数据结构销毁时也被销毁.
构造操作(constructor)是一个过程,它把一些存储位置变换到一个对象.其可能行为可以是什么也不做,也可以是创建极其复杂的对象.
一个对象处于部分成形(partiallyformed)状态,如果它已经可以赋值或销毁.对于部分成形但尚未完全成形的对象,除了赋值(放在左边)和析构,做其他任何过程的效果都无定义.
引理1.3 良形式的对象也是部分成形的.
默认构造操作(defaultconstructor)没有参数,且能使对象达到部分成形的状态.我们将采用下面记法:
拷贝构造操作(copyconstructor)有一个同类型的参数,它构造出一个等于该参数的新对象.我们将采用下面记法: