1.11 为什么C++会成功

C++能够如此成功,部分原因是它的目标不只是为了将C语言转变成为OOP语言(虽然这是最初的目的),而且还为了解决当今程序员,特别是那些在C语言中已经大量投入的程序员所面临的许多问题。传统上,人们已经对OOP语言有了这样的看法:程序员应当抛弃所知道的每件事情并且从一组新概念和新文法重新开始,程序员应当相信,从长远观点来看,最好是丢掉所有来自过程型语言的老行装。从长远角度看,这是对的,但从短期角度看,这些行装还是有价值的。最有价值的可能不是那些原有的代码库(用合适的工具,可以转变它),而是原有的头脑库。作为一个职业C程序员,如果让他丢掉他知道的关于C的每一件事情,以适应新的语言,那么,在几个月内,他将毫无成果,直到他的头脑适应了这一新范例时为止。但如果他能调整已有的C知识,并在这个基础上扩展,那么他就可以继续保持高的生产效率,带着已有的知识,进入面向对象程序设计的世界。因为每一个人都有自己的程序设计思维模型,所以这个转变是很混乱的。因此,简而言之,C++成功的原因是很经济的:转变到OOP上需要代价,而转变到C++上所花的代价可能比较小[1]

C++的目的是提高生产效率。生产效率与多方面因素有关,而语言是为了尽可能地帮助使用者,尽可能少地因为使用武断的规则或特殊性能的需求而妨碍使用者。C++成功的原因是它立足于实际:尽可能地为程序员提供最大利益(至少从C的观点上看是这样)。

1.11.1 一个较好的C

即便程序员在C++环境下继续写C代码,也能直接得到好处,因为C++堵塞了C语言中的许多漏洞,并提供更好的类型检查和编译时的分析。程序员必须先声明函数,使编译器能检查它们的使用。预处理器也限制了值替换和宏,这就减少了查找错误的困难。C++有一个特征,称为引用(reference),它允许对函数参数和返回值的地址进行更方便的处理。通过函数重载(function overloading),改进了对名字的处理,使程序员能对不同的函数使用相同的名字。另外,一个称为名字空间(namespaces)的特征也改进了对名字的控制。除此之外,还有许多较小的特征改善了C的安全性。

[1]我说“可能”,因为C++太复杂了,实际上转变到Java上可能更便宜。决定选择哪种语言有许多因素,本书中我假定已经选择了C++。