教而至简,不亦乐乎。
——西塞罗
现在的C++仿佛进化成了一种新的语言。与C++98相比,C++11更易于我们清晰、简洁、直观地表达思想。而且编译器可以更好地检查程序中的错误,程序的运行速度也提高了。
就像其他任何一种现代编程语言一样,C++的规模庞大且提供的库异常丰富,值得程序员认真学习以便高效地利用。这本小册子的目的是让有经验的程序员快速了解现代C++语言,因此它几乎介绍了C++的全部核心功能和重要的标准库组件。读者花费几个小时就能读完本书,但是想必所有人都清楚,要想写出漂亮的C++程序绝非一日之功。好在本书的目的并非让读者熟练掌握一切,而只是介绍语言的概貌,给出一些经典的例子,然后帮助读者开始自己的C++之旅。如果读者希望深入了解C++语言,请阅读我的另一本著作《The C++ Programming Language,Fourth Edition》(简称TC++PL4)。实际上,本书正是TC++PL4第2~5章的扩充版,只不过出于完整性和独立性的考虑我们稍微增加了一些内容。本书的篇章结构与TC++PL4保持一致,读者如果对细节感兴趣,可以在TC++PL4中进一步寻找答案。同样,在我的个人主页(www.stroustrup.com)上为TC++PL4编写的习题也可以用于本书。
我们假设读者已经拥有了一些编程经验。如果没有,建议你先找一本入门教材学习一下,比如《Programming:Principles and Practice Using C++》[Stroustrup,2009]。即便你曾经编写过程序,所使用的语言或者编写的应用也可能在风格或形式上与本书相距甚远。
我们用城市观光的例子来比喻本书的作用,比方说参观哥本哈根或者纽约。在短短几个小时之内,你可能会匆匆游览几个主要的景点,听到一些有趣的传说或故事,然后被告知接下来应该参观哪里。仅靠这样一段旅程,你无法真正了解这座城市,对听到和看到的东西也是一知半解,更别提熟悉这座城市的生存法则。毕竟要想认识并融入一座城市,需要在其中生活很多年。不过幸运的是,此时你已经对城市的总体情况有了一些了解,知道了它的某些特殊之处,并且对有的方面产生了兴趣。接下来,你有机会开始真正的探索之旅了。
本书介绍C++语言的主要功能,尤其是关于面向对象编程和泛型编程的知识。在写作时,我们没有涉及太多细节,更不想把本书写成参考手册。对于标准库也尽量去繁就简,用生动的例子进行讲解。本书没有介绍ISO标准之外的库,读者需要的话可以自行查阅有关资料。如果我们提到了某个标准库函数或类,读者很容易就能在头文件中找到它的定义,还可在互联网上搜集到更多与之有关的信息。
本书力求把C++作为一个整体呈现在读者面前,而非像千层糕一样逐层地介绍。因此,在这里我们不细分某项语言特性是归属于C、C++98还是C++11,这些与语言沿革有关的信息在第14章(历史和兼容性)可以找到。
致谢
本书的大多数内容源自TC++ PL4[Stroustrup,2012],因此首先感谢协助我完成TC++PL4的所有同仁。还要感谢Addison-Wesley的编辑Peter Gordon,是他建议作者把TC++PL4的部分章节扩展成本书的。
Bjarne Stroustrup