C++: 认识C++
如果你问十个程序员"最难的语言是什么",至少有五个会说是 C++。但如果你问"性能最强、控制最细、能写底层系统的语言是什么",十个里十个会说 C++。这一课咱们不写代码,先把 C++ 这个人认识清楚——它是谁、从哪来、能干嘛、值不值得学。
1. C++ 是什么?
C++ 是一种编译型、静态类型、支持多范式的编程语言。说人话就是:
- 编译型 — 你写的代码要先编译成机器码,才能运行(像做菜:先备菜,再下锅)
- 静态类型 — 每个变量类型在编译时就确定了(像填表:先规定每栏填什么类型)
- 多范式 — 支持面向过程、面向对象、泛型编程(像工具箱:扳手/螺丝刀/电钻都有)
(1) 它和 C 的关系
C++ 是 C 的"超级升级版"——1983年丹麦程序员本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)在 C 语言基础上加了类(class),让 C 也能做面向对象编程。
2. 为什么学 C++?
| 理由 | 说明 |
|---|---|
| 性能天花板 | C++ 编译后是直接跑在硬件上的机器码,没有虚拟机、没有解释器、没有垃圾回收——快到极致 |
| 控制力极强 | 内存怎么分配、CPU 缓存怎么用、指针怎么跳——你说了算 |
| 就业面广 | 游戏引擎、高频交易、嵌入式、自动驾驶、操作系统——都是 C++ 的天下 |
| 打牢基础 | 学完 C++,其他语言(Java/Python/Go)的"底层逻辑"你都懂 |
| 长期保值 | C++ 问世40+年,依然在演进(C++23 刚出),不会过时 |
▶ 示例 1:Hello World(难度⭐)
#include <iostream>
int main() {
std::cout << "Hello, C++ World!" << std::endl;
return 0;
}
输出:
Hello, C++ World!
运行结果:
Hello, C++ World!
#include <iostream>— 引入输入输出库(就像 Python 的import)int main()— 程序入口(就像 Python 的if __name__ == "__main__":)std::cout << "..."— 输出到屏幕(就像 Python 的print())return 0;— 告诉操作系统"程序正常结束"(0 表示成功)
▶ 示例 2:C++ 有多快?(难度⭐⭐)
#include <iostream>
#include <chrono>
int main() {
// 用 chrono 高精度计时
auto start = std::chrono::high_resolution_clock::now();
// 跑10亿次空循环
long count = 0;
for (long i = 0; i < 1'000'000'000; i++) {
count++;
}
auto end = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration<double>(end - start).count();
std::cout << "10亿次循环耗时:" << duration << " 秒" << std::endl;
return 0;
}
输出:
10亿次循环耗时:0.5 秒
chrono 是 C++11 引入的时间库,精度到纳秒级。你暂时不用看懂,感受一下 C++ 的风格就好——#include 引入库、int main() 是程序入口、std::cout 输出、using namespace std; 可以避免每次写 std::。
3. C++ vs C vs Python
| 维度 | C | C++ | Python |
|---|---|---|---|
| 类型 | 编译型 | 编译型 | 解释型 |
| 范式 | 面向过程 | 多范式(过程+OOP+泛型) | 多范式(OOP+函数式) |
| 内存管理 | 手动(malloc/free) | 手动+智能指针(new/delete/unique_ptr) | 自动(垃圾回收) |
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 学习难度 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐ |
| 典型应用 | 操作系统内核、驱动 | 游戏引擎、高频交易、浏览器内核 | 数据分析、AI、Web 后端 |
| 代码量 | 多 | 多 | 少 |
| 报错友好度 | 差(段错误?自己猜) | 中(编译错误很严格) | 好(报错信息清晰) |
(1) 生活类比
- C — 手动挡赛车:快,但你得自己踩离合、换挡、控制转速,新手容易熄火(段错误)
- C++ — 手动挡赛车 + 导航 + 倒车雷达:还是快,但多了很多辅助功能(类/模板/智能指针),用好了比 C 安全
- Python — 自动驾驶电动车:舒服,写代码像说话,但你想"飙车"的时候它快不起来
4. C++ 标准演变
C++ 从诞生到现在,经历了多次标准更新。每次更新都加了一堆新功能,让 C++ 越来越好用。
| 年份 | 标准 | 别名 | 重要新特性 |
|---|---|---|---|
| 1998 | C++98 | 第一个国际标准 | 模板、异常、RTTI |
| 2003 | C++03 | 小修补 | bug 修复 |
| 2011 | C++11 | C++0x | 重大更新:auto、范围for、nullptr、Lambda、shared_ptr、thread、初始化列表 |
| 2014 | C++14 | — | 小增强(make_unique、泛型 Lambda) |
| 2017 | C++17 | — | 结构化绑定、if constexpr、折叠表达式、string_view、文件系统库 |
| 2020 | C++20 | — | 模块(Modules)、协程(Coroutines)、概念(Concepts)、Ranges |
| 2023 | C++23 | — | std::print、flat_map、增强模块化 |
(1) 本课程用什么标准?
C++17 —— 平衡了"新特性好用"和"编译器支持好"。
- C++11 是"必须学"的基线(现代 C++ 的起点)
- C++17 是"推荐用"的甜点(大部分新特性已稳定)
- C++20 很酷,但部分特性在 MinGW 上支持不完整,教学中点到为止
auto 是 C++11 的,std::string_view 是 C++17 的。如果面试官问你"C++11 有哪些新特性",这是高频题。
5. C++ 能做什么?
C++ 的应用场景,用一句话总结就是:"性能要求极高、硬件控制极细、不能出错的地方"。
(1) 场景一:游戏开发(最典型)
- 游戏引擎:Unreal Engine(虚幻引擎)就是用 C++ 写的
- 游戏逻辑:很多 3A 大作的核心逻辑是 C++(图形渲染/物理引擎/AI 寻路)
- 为什么用 C++:游戏每秒要渲染 60 帧,每帧要在 16 毫秒内算完——Python 做不到
(2) 场景二:高频交易(最赚钱)
- 量化交易系统:华尔街/伦敦的高频交易系统,延迟要求微秒级
- 为什么用 C++:Python 启动一个函数调用就要几微秒,C++ 能精确到纳秒
(3) 场景三:嵌入式与物联网(最广泛)
- 单片机程序:洗衣机、微波炉、智能手表的控一件——都是 C/C++
- 汽车电子:特斯拉的车载系统,大量 C++ 代码
- 为什么用 C++:嵌入式设备内存小(几KB 到几MB),只有 C++ 能精细控制内存
(4) 场景四:浏览器与数据库内核(最基础)
- 浏览器内核:Chrome 的 V8 引擎(跑 JavaScript 的)、Edge 的 Blink,都是 C++
- 数据库:MySQL、PostgreSQL、MongoDB 的核心引擎,都是 C/C++
- 为什么用 C++:这些基础设施每天处理亿级请求,性能差一点,全球都卡
(5) 场景五:操作系统与驱动(最底层)
- 操作系统:Windows 内核(部分)、Linux 内核(部分)、macOS 内核(部分)——都是 C/C++
- 为什么用 C++:操作系统要和硬件直接打交道,只有 C/C++ 能直接操作内存和硬件寄存器
6. 常见应用场景
- 高性能服务器:即时通讯(微信后端)、直播推流——用 C++ 写网络层,支撑百万并发
- 图形图像处理:Photoshop 的核心算法、OpenCV(计算机视觉库)——都是 C++
- 区块链:比特币、以太坊的核心节点——用 C++ 保证性能和安全性
- 科学计算:大型数值模拟(天气预报/核物理仿真)——C++ 的矩阵运算能跑满 CPU
▶ 示例 3:简单的用户交互(难度⭐)
#include <iostream>
#include <string>
int main() {
std::string name;
int age;
std::cout << "请输入你的名字:";
std::cin >> name;
std::cout << "请输入你的年龄:";
std::cin >> age;
std::cout << "你好," << name << "!明年你 " << (age + 1) << " 岁。" << std::endl;
return 0;
}
输出:
请输入你的名字:
请输入你的年龄:
你好,!明年你 岁。
运行效果:
请输入你的名字:小明
请输入你的年龄:18
你好,小明!明年你 19 岁。
std::cin 从键盘读取用户输入,std::cout 输出到屏幕。std::string 是 C++ 的字符串类型,需要 #include <string>。
❓ 常见问题
new/delete,忘了就内存泄漏。但 Java 有虚拟机性能开销,所以游戏引擎/高频交易还是用 C++。std::string)。vector/map)、算法(sort/find)、迭代器。学完 STL 效率提升 10 倍,Phase 6 会深入讲解。📖 小节
- C++ 是 C 的升级版,支持面向对象编程,性能天花板级
- 学 C++ 的核心理由:性能极强、控制极细、就业面广、打牢基础
- C++ vs Python:前者编译型/快/难,后者解释型/慢/简单——场景不同,各有所长
- C++ 标准一直在演进:C++11(现代 C++ 起点)、C++17(本课程采用)、C++20(很酷但支持不完整)
- C++ 的应用场景:游戏引擎、高频交易、嵌入式、浏览器内核、操作系统——都是"性能要求极高"的领域
- STL(标准模板库)是 C++ 的杀手锏,Phase 6 会深入讲解
📝 作业
-
基础题 (Difficulty ⭐):去搜索引擎搜一下"用 C++ 写的知名软件/游戏/系统",列出至少 5 个,感受 C++ 的应用广度。
-
进阶题 (Difficulty ⭐⭐):你的电脑上装了 C++ 编译器吗?打开终端/命令行,输入
g++ --version或clang++ --version,看看有没有输出。如果没有,记下你的操作系统版本(Windows 10/11?macOS?Linux 哪个发行版?),下一课我们会教你怎么装。 -
挑战题 (Difficulty ⭐⭐⭐):C++ 有一个著名的"酒泉"——"只学 C++ 语法,不学计算机底层原理,等于白学"。搜索并阅读一篇关于"学 C++ 需要懂哪些计算机底层知识"的文章(推荐搜"学 C++ 要学计算机组成原理吗"),写一篇 200 字以内的读后感:你认为学 C++ 之前,需要先学 C 语言吗?为什么?