View C++ as a federation of languages
- 一开始,C++只是在C的基础上加上了一些面向对象的特性而已。C++ 最初的名称叫做:
C with Classes
,这也间接的反映了这一血缘关系。 - 但是但这个语言逐渐成熟,它变得更活跃更无拘无束,更大胆冒险,开始接受不同于C with Classes的各种观念、特性和编程战略。
Exceptions
(异常)对函数的结构化带来不同的做法,templates
(模板)将我们带到新的设计思考方式,STL
则定义了一个蜷缩未见的伸展性做法。 - 而今天的C++已经是一个多重泛型的编程语言,
一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式
的语言,这些能力和弹性使C++成为一个无可匹敌的工具。
我们该如何连接这样一门语言呢?
—— 最简单的方法就是将C++ 视为一个有相关语言组成的联邦而非单一语言。在其某个次语言中,各种守则与通例都倾向简单、直观易懂、并且容易记住。然而但你从一个次语言移往另一个次语言时,守则可能会改变。为了理解C++,你必须认识其主要的次语言。幸运的是总共只有四个:
- C: 说到底C++仍是以
C语言
为基础的。区块、语句、预处理器、内置数据类型、数组、指针等都是来自于C。许多时候C++的问题的解法不过是较高级的C解法,但你以C++内的C成分工作时,高效编程则照应出C语言的局限:没有模板、没有异常、没有重载...
。 - Object-Oiented C++: 这部分就是C with Classes所诉求的:classes(包括构造函数和析构函数),
封装、继承、多态、virtual函数...等
。这一部分是面向对象设计之古典守则在C++上的直接实施。 - Template: 这是C++的泛型编程部分,也是大多数程序员挤眼最少的部分。实际上templates威力强大,它们带来了崭新的泛型编程,。
- STL: STL是一个程序库,看名称也知道,它是非常特殊的一个。它对
容器、迭代器、算法、以及函数对象的规约
有极佳的紧密配合与协调,然而templates以及程序库也可以其他想法建置出来。STL有自己特殊的办事方式,当你伙同STL一起工作时,你必须遵守它的规约。
当你一旦跨入STL你就会了解,迭代器和函数对象是在C指针之上捏造出来的,所以对STL的迭代器和函数对象而言,pass-by-value守则再次适用。
- 因此,C++并不是一个带有一组守则的一体语言;它是从四个次语言组成的联邦政府,每个次语言都有自己的规约。记住这四个次语言你就会发现C++容易了解很多。
内容来自Effective C++,如果你热爱C++,那请你一定要坚持下去,加油!