天天看点

笔记:View C++ as a federation of language

 View C++ as a federation of language

异常对函数的结构化带来不同的做法 (29)

模板将我们带到新的设计思考方式   (41)

为了理解C++,有四个主要的次语言。

C

C++仍然是以C为基础的,预处理器、内置数据类型、数组、指针、语句(statements)、块(blocks)等都是来自C语言。

许多时候C++对问题的解法其实就是较高级C解法。

当你以C++内的C部分工作的时候,高效编程守则反映出了C语言的一些局限性:没有模板,没有异常,没有重载。。。

Object-Oriented C++

这部分就是C的扩展部分,类Class 包含了构造和析构函数,封装(encapsulation),继承(inheritance)、多态(polymorphism)、virtual虚函数(动态绑定)...等等。

这一部分是面向对象设计在C++上最直接的实施。

Template C++

这是C++的泛型编程部分(generic programming).

Template 相关考虑与设计已经弥漫整个C++,良好编程守则中“唯有template适用”的特殊条款并不罕见(条款46谈到调用模板函数时如何协助类型转换)。

由于template威力强大,从而带来了崭新的编程范型(programming paradigm),也就是模板元编程(template metaprogramming,TMP).

(条款48对此有描述)

STL

STL是一个template程序库。对容器,迭代器,算法以及函数对象的规约有极佳的机密配合与协调。

STL有自己特殊的办事方式,当你伙同STL一起工作,就必须遵守它的规约。

记住这四个子语言,当你从某个子语言切换到另外一个得时候,有可能需要改变你的策略,这是为高效编程做的工作。

例如对于内置数据类型而言传值比传引用高效。但是当你从C++的C部分往面向对象C++做的时候,由于用户自定义构造函数和析构函数的存在,传引用(const引用)比较好。运用template C++的时候尤其如此,因为彼时你甚至不知道所处理的对象类型。然而一旦跨入STL你就会了解,迭代器和函数对象都是在C指针之上塑造出来的,所以对STL的迭代器和函数对象而言,传值再次适用。

(参数传递方式的选择参见条款20)

C++并不是带有一组守则的一体语言,是从四个子语言组成的,每个子语言都有自己的规约。

c++ 高效编程守则视状况而变化,取决于你使用C++的那一部分。

PS:

(参数传递方式的选择参见条款20)

(异常对函数的结构化带来不同的做法 条款29)

(模板将我们带到新的设计思考方式  条款41)

继续阅读