如果说 C 语言教会你「计算机如何思考」,那 C++ 教会你的是「如何组织一个不断生长的程序」。这篇笔记写给刚接触 C++ 的朋友,目标是建立一张粗但不歪的知识地图:知道 C++ 是什么、能做什么、代码长什么样、该按什么顺序学。

一、C++ 是什么

C++ 诞生于 1979 年,本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)最初把它叫做「带类的 C」。它在 C 语言的基础上加上了面向对象、泛型编程和异常处理等能力,同时几乎完整保留了 C 的高性能与对硬件的直接控制力。

它最常见的出场位置:

  • 游戏引擎:Unreal Engine、Cocos 等核心都是 C++ 写的;
  • 操作系统与驱动:Windows、macOS 的大量系统组件;
  • 高频交易与图形渲染:对延迟和帧率斤斤计较的地方;
  • 嵌入式与物联网:资源受限但逻辑复杂的设备。
一句话理解 C++ 的定位:"它给你 C 的速度,再给你一整套管理大型工程的工具——代价是你需要学的东西变多了。"

二、第一个程序与编译流程

学习任何语言都从打招呼开始。C++ 的经典第一课:

#include <iostream>   // 引入输入输出库

int main() {
    std::cout << "Hello, 1024 Group!" << std::endl;
    return 0;          // 返回 0 表示程序正常结束
}

和 Python 不同,C++ 是编译型语言:源代码必须先翻译成机器码才能运行。以 g++ 为例:

g++ hello.cpp -o hello   # 编译:把 hello.cpp 变成可执行文件 hello
./hello                  # 运行:输出 Hello, 1024 Group!

这背后其实有四个阶段:预处理 → 编译 → 汇编 → 链接。初学阶段只需知道「改完代码要重新编译」,遇到 undefined reference 之类的报错时,再回头研究链接是怎么回事。

三、变量与基本类型

C++ 是静态类型语言:每个变量都要先声明类型,编译器据此分配内存、检查错误。

int    age    = 20;        // 整数
double score  = 92.5;      // 双精度浮点数
char   grade  = 'A';       // 单个字符
bool   passed = true;      // 布尔值

auto size = 10;            // auto:让编译器自己推断类型(C++11 起)

初学者重点理解三件事:int 有取值范围(会溢出)、double 有精度误差(别用 == 直接比浮点数)、char 本质是小整数('A' 就是 65)。

四、流程控制与函数

程序不外乎「顺序 + 分支 + 循环」。C++ 的写法和 C 一致:

// 判断 1~100 中所有的偶数和
int sum = 0;
for (int i = 2; i <= 100; i += 2) {
    sum += i;
}

if (sum > 2000) {
    std::cout << "挺大的" << std::endl;
} else {
    std::cout << "再算算" << std::endl;
}

把重复的逻辑封装成函数,是写出可维护代码的第一步:

// 函数:两数中的较大值
int maxOf(int a, int b) {
    return (a > b) ? a : b;   // 三目运算符
}

五、指针与引用:C++ 的第一道坎

这是大多数初学者卡住的地方,先用一张表建立直觉:

概念写法可以重新指向别人吗可以为空吗
指针int* p = &x;可以可以
引用int& r = x;不可以(绑定即终身)不可以

把指针理解成「存地址的变量」,把引用理解成「变量的别名」,九成的困惑会自动消失。现代 C++ 的建议是:优先用引用和智能指针,少裸 new/delete。

六、STL 初探:站在标准库肩膀上

STL(标准模板库)是 C++ 附送的「瑞士军刀」,会用了之后写代码效率翻倍。最常见的三件套:

#include <vector>
#include <string>

std::vector<int> nums = {3, 1, 4, 1, 5};  // 动态数组:自动扩容
nums.push_back(9);                        // 尾部追加元素

std::string name = "qlmfs";               // 字符串:不用手动管内存
name += " 1024";

后续还会遇到 map(键值对)、set(去重集合)、sort(排序函数)——它们和 vector 一样,都是模板,这正是「泛型编程」思想落地的地方。

七、学习路线建议

  1. 第一阶段:语法基础(变量、分支、循环、函数、数组),配合刷简单题;
  2. 第二阶段:指针与内存模型,手画内存图理解栈与堆;
  3. 第三阶段:面向对象(类、封装、继承、多态);
  4. 第四阶段:STL 与模板,开始写「像 C++ 的 C++」;
  5. 第五阶段:做一个完整的小项目(如控制台图书管理系统)收尾。

工具方面:编译器选 g++ / clang++ / MSVC 任一,编辑器推荐 VS Code + C++ 插件或 Visual Studio;调试一定要学 GDB 或 IDE 自带断点调试,会比看报错猜问题快十倍。

八、小结

C++ 体量大是真的,但入门并不需要「学完」。先把它当「带类的 C」用起来,再一点点解锁面向对象和 STL,最后碰模板元编程这些深水区。跑通第一个程序,永远是学会一门语言最诚实的一步。