Skip to content

Ch 1: 导论

  • 理解 C++ 标准库的设计理念
  • 明白 Python 和 C++ 标准库的哲学差异
  • 学会如何使用本书的对比学习法

Python 开发者习惯于” Batteries Included”——标准库几乎包含一切。

import os
import json
import datetime
import collections
import itertools
import threading
import asyncio
# Python 标准库太丰富,很多场景不需要第三方库

C++ 标准库同样丰富,但设计哲学不同:

#include <vector>
#include <string>
#include <map>
#include <algorithm>
#include <filesystem>
#include <chrono>
#include <thread>
#include <future>
// C++ 标准库同样覆盖大部分场景

C++ 标准库的优势:

  • 零成本抽象——不用的功能不增加运行时开销
  • 编译时检查——错误提前到开发阶段
  • 极致性能——直接映射到硬件操作
  • 无外部依赖——编译后即可分发

Python 的抽象有运行时成本:

# Python 列表推导——每次迭代有 Python 对象创建和销毁开销
squares = [x**2 for x in range(1000000)]

C++ 的抽象几乎零成本:

// C++ 范围 for——编译后就等价于指针遍历
std::vector<int> v(1000000);
for (int x : v) {
process(x); // 编译后就是指针遍历,无额外开销
}

Python 的类型错误在运行时发现:

def add(a, b):
return a + b
add("hello", 5) # TypeError: can only concatenate str (not "int") to str
# 只有运行到这里才知道出错

C++ 在编译时就检查:

template<typename T>
T add(T a, T b) {
return a + b;
}
add(std::string("hello"), 5); // 编译错误!类型不匹配

本书面向:

  • 有 Python 开发经验的程序员——熟悉 Python 的标准库用法
  • 需要将 Python 代码迁移到 C++ 的团队——需要对照参考
  • 希望深入理解标准库对应关系的学习者——建立系统性认知

前提条件:

  • 了解基本编程概念(变量、函数、类)
  • 熟悉 Python 的标准库使用经验

不适合人群:

  • 完全没有编程经验的初学者
  • 需要从零开始学习编程的人

对比学习法的原理:

人类通过对比学习新知识。当你知道 Python 的 list 怎么用,理解 C++ 的 vector 就更容易。本书利用这个原理,将两种语言的相同功能并排展示。

# Python 方式
result = [x**2 for x in range(10) if x % 2 == 0]
// C++ 等价(基础方式)
std::vector<int> result;
for (int x = 0; x < 10; ++x) {
if (x % 2 == 0) {
result.push_back(x * x);
}
}
// C++ 等价(C++20 Ranges 方式)
std::vector<int> result;
for (int x : std::views::iota(0, 10)
| std::views::filter([](int x) { return x % 2 == 0; })
| std::views::transform([](int x) { return x * x; })) {
result.push_back(x);
}

每章结构:

  1. 概念介绍:简洁说明两种语言的核心差异和设计理念
  2. 代码对照:并列展示 Python 和 C++ 的等效实现
  3. 进阶话题:讨论更深层的原理和最佳实践
  4. 速查表:快速参考常用对照

学习建议:

  • 边看边动手写代码
  • 遇到不懂的概念,对照 Python 的经验理解
  • 完成每章结尾的练习题
维度PythonC++
类型系统动态类型,运行时检查静态类型,编译时检查
执行方式解释执行编译执行
内存管理GC 自动回收手动+RAII
设计理念灵活性优先性能优先
标准库规模丰富/统一相对精简/碎片化
抽象成本有运行时开销零成本抽象

Python 的核心设计哲学:简单胜于复杂,显式胜于隐式

# Python 一切皆对象,操作统一
[1, 2, 3].append(4) # 列表方法
"hello".upper() # 字符串方法
max([1, 2, 3]) # 通用函数
sum({1, 2, 3}) # 集合也能用

Python 的标准库设计强调:

  • 一致性:所有容器类型有相似的接口
  • 易用性:不需要了解底层实现
  • ** Batteries Included**:几乎所有功能都有

C++ 的核心设计哲学:你控制什么,Python 隐藏什么

// C++ 值语义和引用语义分离
std::vector<int> v{1, 2, 3};
v.push_back(4); // 容器方法
std::string s = "hello";
std::transform(s.begin(), s.end(), s.begin(), ::toupper); // 算法函数

C++ 标准库设计强调:

  • 性能:直接映射到硬件操作
  • 控制:你可以选择不同的容器和算法
  • 零开销:不用的功能不增加成本

开发速度 vs 运行速度:

# Python——快速开发,数据科学首选
import pandas as pd
df = pd.read_csv("data.csv")
result = df.groupby("category").mean()
// C++——高性能,数据处理引擎
// 需要更多代码,但性能可能是 Python 的 10-100 倍

选择建议:

  • 业务逻辑、Web 开发、数据科学 → Python
  • 游戏引擎、图形渲染、高频交易 → C++
  • 混合场景 → Python 包装 C++ 库
C++ 版本年份重要特性Python 类比
C++981998STL 基础Python 2 早期
C++032003缺陷修复Python 2.4
C++112011智能指针、Lambda、autoPython 3.2
C++142014泛型 Lambda、变量模板Python 3.4
C++172017结构化绑定、if 初始化Python 3.7
C++202020Concepts、Ranges、模块Python 3.9
C++232023std::expected、更多 RangesPython 3.12

本书默认使用 C++20,这是当前主流版本,具备完整的现代特性。

  • C++ 标准库追求零成本抽象和极致性能
  • 对比学习法帮助快速建立知识映射
  • Python 的灵活性 vs C++ 的性能是核心权衡
  • C++20 是当前主流版本

下章预告:ch02 搭建 C++ 开发环境。