一、C++ 的诞生:一段不得不说的历史

聊 C++ 之前,我想先问你一个问题:为什么会有 C++?

上世纪 70 年代末,Bjarne Stroustrup 在贝尔实验室写博士论文。他当时用的语言叫 Simula,这东西有类、有继承,概念很先进。但跑起来太慢了,实用性差。反过来看 C 语言,效率高、能直接操作硬件,但抽象能力弱——你要写个复杂的数据结构,得自己手撸一堆函数指针。

Bjarne 的想法很简单:能不能把 Simula 的面向对象思想,嫁接到 C 语言上?

于是 1979 年,他搞了个「带类的 C」(C with Classes)。1983 年正式改名为 C++。那个 ++ 符号,其实就是 C 语言的自增运算符——暗示着「C 语言的升级版」。

我个人觉得,C++ 最牛的地方在于:它不强迫你用某种范式。你可以写面向过程、面向对象、泛型编程,甚至函数式风格。这种灵活性,让它在游戏引擎、高频交易、嵌入式系统、大型桌面软件等领域站稳了脚跟。

核心要点:C++ 是 C 语言的超集,保留了 C 的高效和底层控制力,同时加入了类、继承、多态、模板等高级特性。

C++ 的版本演进

你可能听说过 C++98、C++11、C++17 这些名词。它们不是不同的语言,而是同一个语言的不同标准版本。我简单列一下:

标准版本 发布时间 主要特性
C++98 1998 年 第一个国际标准,模板、STL 标准库
C++11 2011 年 auto 类型推导、智能指针、Lambda 表达式、右值引用
C++14 2014 年 泛型 Lambda、返回类型推导
C++17 2017 年 if constexpr、结构化绑定、文件系统库
C++20 2020 年 概念(Concepts)、协程、范围(Ranges)

嗯,这里要注意:不要一上来就追最新标准。我在项目中见过有人用 C++20 的协程写代码,结果同事的编译器不支持,编译都过不了。实际开发中,C++17 是目前最稳妥的选择,兼容性好、特性也够用。

二、搭建开发环境:MinGW 与 GCC

要写 C++,你得先有个编译器。说白了,编译器就是把人类能读懂的 C++ 代码,翻译成机器能执行的二进制指令。

Windows 上最常用的 C++ 编译器套装是 MinGW(Minimalist GNU for Windows)。它里面包含了 GCC(GNU Compiler Collection),这是 Linux 世界最主流的编译器。MinGW 把 GCC 移植到了 Windows 上,让你能在 Windows 下用 Linux 那套工具链。

安装 MinGW 的步骤

  1. 下载安装包:去 MinGW 官网或 SourceForge 下载 mingw-get-setup.exe。
  2. 运行安装程序:选择安装目录,我建议直接装到 C:\MinGW,路径里不要有中文和空格。
  3. 选择组件:至少勾选 mingw32-gcc-g++(C++ 编译器)和 mingw32-gcc(C 编译器)。
  4. 应用更改:菜单栏点 Installation → Apply Changes,等待下载完成。
  5. 配置环境变量:把 C:\MinGW\bin 添加到系统的 PATH 环境变量中。

小技巧:安装完成后,打开命令行输入 g++ --version,如果能看到版本号,说明安装成功了。我曾经帮一个同事排查了半天,最后发现他输成了 gcc --version——gcc 是 C 编译器,g++ 才是 C++ 的,别搞混了。

Linux / macOS 用户

如果你用的是 Linux,直接 sudo apt install g++(Ubuntu/Debian)或 sudo yum install gcc-c++(CentOS/RHEL)就行。macOS 上装 Xcode Command Line Tools,里面自带 clang 编译器,用法和 g++ 基本一样。

三、第一个程序:Hello World

好了,环境搭好了,我们来写第一个 C++ 程序。这是每个程序员的仪式感——让计算机对你说一声「你好,世界」。

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

这段代码不长,但里面藏着 C++ 的几个核心概念。我拆开给你讲:

  • #include <iostream>:这是预处理指令。iostream 是输入输出流库,cout 和 endl 都来自这里。说白了,就是告诉编译器:「我要用标准输入输出功能」。
  • int main():程序的入口函数。每个 C++ 程序必须有且只有一个 main 函数。程序从这里开始执行。
  • std::cout:标准输出流。std 是命名空间,cout 是输出对象。你可以把它理解成「向屏幕写东西的管道」。
  • <<:流插入运算符。把右边的数据「塞进」左边的流里。
  • std::endl:换行并刷新缓冲区。相当于 C 语言里的 \n 加 fflush。
  • return 0;:告诉操作系统程序正常结束。非零值通常表示有错误。

注意:C++ 是大小写敏感的。Mainmain 是两个东西。我见过新手把 main 写成 Main,编译直接报错。还有分号——C++ 里每条语句末尾都要加分号,漏了也会报错。

编译和运行

把上面的代码保存为 hello.cpp,然后在命令行里执行:

g++ hello.cpp -o hello.exe
./hello.exe

第一行是编译命令。g++ 调用编译器,hello.cpp 是源文件,-o hello.exe 指定输出文件名。如果不写 -o,默认会生成 a.exe(Windows)或 a.out(Linux/macOS)。

第二行是运行程序。你应该会看到屏幕上打印出:

Hello, World!

嗯,就是这行简单的文字。但你知道吗?我第一次在屏幕上看到自己写的程序输出时,那种感觉真的很奇妙。虽然现在写了十几年 C++,每次编译通过、看到预期输出,心里还是会踏实一下。

四、本章知识体系

下面这张图,帮你把本章的核心脉络理清楚:

第一章:C++ 初探 · 知识体系 C++ 历史与版本 开发环境搭建 第一个程序 1979: C with Classes → 1983: C++ C++98 → C++11 → C++14 → C++17 → C++20 面向过程 / 面向对象 / 泛型 / 函数式 Windows: MinGW(内含 GCC) Linux: apt install g++ macOS: Xcode Command Line Tools #include <iostream> int main() { ... } std::cout << "Hello" << std::endl; 核心目标:理解 C++ 定位 → 搭建可用的开发环境 → 成功运行第一个程序

五、避坑指南

最后,分享几个我踩过的坑:

  • 路径里有中文:我曾经把项目放在「桌面/我的代码」文件夹里,结果编译报错说找不到头文件。MinGW 对中文路径支持不太好,建议所有路径都用英文。
  • 忘记加分号:这是 C++ 新手最常见的错误。编译器报错时,会提示你「expected ';' before ...」,看到这个就回去检查上一行末尾。
  • main 函数写错:有人写成 mianMainint main 漏了括号。记住:必须是 int main(),小写,带括号。
  • 编译命令输错g++ 不是 gcc-o 是小写字母 o,不是数字 0。

好了,这一章的内容就到这里。你只要把 Hello World 跑通了,后面的路就好走了。C++ 的世界,从这一行输出开始。


公众号:蓝海资料掘金营,微信 deep3321