EFFECTIVE C++ 条款01 视C++为一个语言联邦
1. 理解C++
- 最初的c++只是c语言加上一些面向对象的特性,即C With Classes
- 现代的C++已经变成了多重范型编程语言(multiparadigm programming language),它同时支持过程形式编程(procedural),面向对象形式(object-oriented) ,函数形式(functional),泛型形式(generic),元编程形式(metaprogramming)。
- 那么如此多元化的C++,究竟该怎么理解这样的语言呢。最简单的办法就是将C++看作一个语言的联邦,而非单一的一种语言。在这个联邦中,我们称联邦的每个成员为次语言(sublanguage)。每种次语言的守则与通例都倾向简单直观。但是在从一种次语言迁移到另一种次语言时,高效编程的守则通常会要求你改变策略。
2. 联邦中的次语言
1.C
- 说到底,C++仍以C语言为基石。区块(blocks),语句(statements),预处理器(preprocessor),内置数据类型(built-in data types),数组(arrays),指针(pointers)等等都来自于C语言。但是在使用C++内的C语言成分时,高效编程守则映照出C语言的局限性:没有模版,没有异常,没有重载等等。
2. Object-Oriented C++
- 这部分也就是C with Classes所诉求的:类(classes),封装(encapsulation),继承(inheritance),多态(polymorphism)等等。
3. Template C++
- 属于C++泛型编程的部分。
4. STL
- STL是一个template程序库。其对容器(containers),迭代器(iterators),算法(algorithms),以及函数对象(function objects)的规范有极佳的紧密配合与协调。
3. 总结
- C++并不是一个带有一组守则的一体语言。它主要是由四个次语言组成的联邦政府,每个次语言都有自己的规范。在此层面上可以更好的理解C++。
- 谨记:高效编程守则视状况而改变,取决于你使用C++的哪一部分。