Effective C++ 条款01:视 C++ 为一个语言联邦
本篇为《Effective C++:改善程序与设计的 55 个具体做法》读书笔记系列第一篇。
开篇引言
很多初学者在刚接触 C++ 时,常常会有这样的困惑:
- 为什么 C++ 既有面向过程的语法,又有面向对象的特性?
- 为什么模板(Template)的编程思维和写普通类完全不一样?
- 为什么 STL 的使用方式看起来如此"函数式"?
Scott Meyers 在《Effective C++》开篇第一条就给出了答案:C++ 不是一个单一的编程语言,而是一个由多个次语言(sublanguages)组成的联邦。
理解这一点,是掌握 C++ 高效编程的基石。
核心观点
C++ 是一个多重范式编程语言(multi-paradigm programming language)。在同一个次语言中,各种高效编程守则简单易懂;但当你从一个次语言切换到另一个次语言时,守则可能会完全改变。
高效编程守则视状况而变化,取决于你使用 C++ 的哪一部分。
四大次语言详解
C++ 主要由以下四个次语言组成:
| 次语言 | 核心特性 | 适用场景 |
|---|---|---|
| C | 过程式编程、指针、数组、底层内存操作 | 系统编程、嵌入式、性能敏感代码 |
| Object-Oriented C++ | 类、继承、多态、封装、虚函数 | 大型软件架构、设计模式 |
| Template C++ | 泛型编程、模板元编程(TMP) | 通用库、编译期计算、类型抽象 |
| STL | 容器、算法、迭代器、函数对象 | 数据结构与算法、标准库使用 |
1. C —— 过程式的基础
C++ 最初被命名为 “C with Classes”,它以 C 语言为基础。C 次语言涵盖了:
- 基本数据类型(
int、char、double等) - 指针和数组
- 流程控制(
if、for、while) - 函数和结构体
- 预处理器(
#include、#define)
代码示例:
#include <cstdio>
#include <cstring>
// 纯 C 风格的字符串操作
void c_style_example() {
char buffer[256];
strcpy(buffer, "Hello, C!");
printf("%s\n", buffer);
}
在这个次语言中,高效编程守则是 C 语言的那一套:避免不必要的抽象,直接操作内存,关注性能细节。
2. Object-Oriented C++ —— 面向对象的扩展
这是 C++ 最初的设计目标,也是大多数开发者最熟悉的部分:
- 类(class)和对象
- 继承(inheritance)
- 多态(polymorphism)与虚函数
- 封装(encapsulation)
代码示例:
#include <iostream>
#include <string>
class Shape {
public:
virtual double area() const = 0; // 纯虚函数
virtual ~Shape() = default;
};
class Circle : public Shape {
public:
Circle(double r) : radius(r) {
}
double area() <


4547

被折叠的 条评论
为什么被折叠?



