视C++为一个语言联邦
简介
C++是个多重泛型编程语言,同时支持以下形式的语言:
1)过程形式;
2)面向对象形式;
3)函数形式;
4)泛型形式;
5)元编程形式。
理解C++的方法:将C++视为一个由相关语言组成的联邦而非单一语言。在其某个次语言中,各种守则与通例都倾向简单、直观易懂、并且容易记住。当从一个次语言移至另一个次语言,守则可能改变。下面主要介绍C++的主要次语言。
C
C++是以C为基础的。区块、语句、预处理、内置数据类型、数组、指针等都来自C。有时候C++问题的解法就是较高级的C解法。但是C++内的C成分存在局限,没有模板、没有异常、没有重载。
Object-Oriented C++
此语言主要包括Classes(包括构造函数和析构函数),封装,继承,多态,virtual 函数(动态绑定)等等。
Template C++
这是C++的泛型编程部分。templates威力强大,它能带来崭新的编程范性,即template metaprogramming(TMP,模板元编程)。
STL
STL是一个特殊的template程序库。它对容器、迭代器、算法以及函数对象的规约有极佳的紧密配合和协调,然而templates及程序库也可以其他想法建置出来。STL有自己特殊的办事方式。
C++高效编程
C++高效编程守则视情况而变化,取决于你使用C++的那一部分。对内置(如C)类型而言,pass by value通常比pass by reference高效,对Object-Oriented C++,由于存在用户自定的构造函数和析构函数,pass by reference to const往往更好。而Template使用,彼此甚至不知道所处理的对象的类型。STL中迭代器和函数都是在C指针上塑造出来的,故对其而言,pass by value守则适用。
参考:Effective C++ 侯捷