乐趣区

Effective-C

条款 01:视 C ++ 为一个语言联邦

一开始,C++ 只是加上一些面向对象特性的 C, 但是随着语言的成熟,它变得更加灵活多变,如 Template、STL、异常。
今天 C ++ 已经是一个多重范型编程语言,同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式。这些能力和弹性使 C ++ 变得强大。但我们该如何理解呢?
最简单的方法是将 C ++ 视为一个由相关语言组成的联邦而非单一语言。在某一个次语言中,守则变得简单。在 C ++ 中,主要的次语言有 4 个:

  • C
    说到底 C ++ 是以 C 为基础的,数组、内置数据类型、指针都是来自于 C 的。
  • Object-Oriented C++
    这一部分也就是 C with Classes 所诉求的,classes、封装、继承、多态······体现了面向对象的特性。
  • Template C++
    这是 C ++ 的泛型编程部分。良好的编程守则中“唯 template 适用”的条款并不罕见,实际上 template 威力强大,他们带来崭新的编程范型,也就是所谓的 templatemetaprogramming(TMP,模板元编程)。
  • STL
    它对容器、迭代器、算法以及函数对象的规约有极佳的紧密配合与协调。

C++ 并不是一个带有一组守则的一体语言:它是由四个次语言组成的联邦政府。C++ 高效编程守则视状况而变化,取决于你使用那一部分。
由于有这 4 种不同的风格,所以当你对内置数据类型操作时,通过值传递比通过引用传递更高效;但当你使用的是自定义的对象时,由于构造函数和析构函数的存在,传递 const 引用更好。但当你使用 STL 库时,由于 STL 是通过指针实现的,所以传递值一般更好。

退出移动版