C++是可扩展的。用户不能改变底层语言本身--不能增加新的操作符或者改变语法--但是可以为这门语言增加新的类型。在这方面,C++与某些自然语言相似,如在英语中,人们可以发明新词,但是很难改变语法。然而,扩展语言说起来容易做起来难。
迄今为止我们所见过的绝大多数 类都是为解决特定问题而设计的。我们曾经考虑过类是否可在所有情况下为所有用户使用。我们曾花费过精力来改进类,但最关注的还是在原有条件下使用类。这是大部分类被设计和创建的过程。但是,有时我们想做的不仅仅是为方便自己使用增加新类型,还希望支持其他用户的使用需求。如果某一组类的设计和实现是希望得到广泛应用,那么我们就称之为库。
为了设计其他人也能使用的类,库作者需要承担许多类似语言设计者的工作。类的使用者希望这个类足够“聪明”。他们希望类设计者提供的行为,与我们通常希望编译器提供的行为相似:正确的创建、复制、赋值或者销魂对象。他们还希望类有一些合理的语义:要有足够的操作供他们以直观的或者自然的方式使用这个类。
所谓的“聪明”,还要求类接口的设计有助于减少用户可能犯下的错误,这一点总是被人忽视。
让用户进行语言设计也有不利的一面,因为C++语言本身必须按照库设计者的需求来设计。这涉及到范围广泛的问题,从允许用户自定义类成为完全类型,到类型安全的连接,不一而足。