一、C++ 的历史:从实验室到工业界

C++ 这门语言,说起来有点年头了。它诞生于 1979 年,那时候我还没入行呢。它的父亲叫 Bjarne Stroustrup,在贝尔实验室工作。他当时觉得 C 语言虽然好,但写大型项目时总缺了点什么——说白了,就是缺了面向对象的能力。

于是他在 C 的基础上加了类(class),最初叫“C with Classes”。1983 年才正式改名为 C++。那个 ++ 符号,其实是 C 语言的自增运算符,寓意着“C 语言的升级版”。

我个人习惯把 C++ 的发展分成几个阶段:

  • C++98:第一个国际标准,奠定了现代 C++ 的基础。STL(标准模板库)就是这时候进来的。
  • C++11:我个人觉得这是最激动人心的一次更新。auto 关键字、智能指针、lambda 表达式……写代码的感觉完全不一样了。
  • C++14/17/20:后续的迭代,越来越现代化。尤其是 C++17 的 filesystem 库,我在项目中用得很爽。

你想想看,一门语言能活 40 多年,还在不断进化,这本身就说明它的生命力。

二、开发环境搭建:MinGW + VS Code

2.1 为什么选这套组合?

很多初学者会问:为什么不用 Visual Studio?我的回答是:VS 当然好,但太重了。对于入门来说,VS Code + MinGW 这套组合,轻量、灵活、跨平台。我在公司里写一些小工具时,也经常用这套配置。

2.2 安装 MinGW

MinGW 是 Windows 上的 GCC 编译器。说白了,它就是把 Linux 上的 g++ 搬到了 Windows 上。

  1. 去 MinGW 官网下载安装器(mingw-get-setup.exe)。
  2. 安装时选择 mingw32-gcc-g++mingw32-base
  3. C:\MinGW\bin 添加到系统环境变量 PATH 中。
注意: 我曾经遇到过 PATH 配置错误导致编译器找不到的情况。配置完后,打开命令行输入 g++ --version,如果能显示版本号,就说明成功了。

2.3 配置 VS Code

VS Code 本身只是个编辑器,需要装插件才能变成 IDE。我建议装这几个:

  • C/C++ 扩展(由 Microsoft 官方提供)
  • Code Runner:一键运行代码,省事
  • Bracket Pair Colorizer:括号匹配,写 C++ 时特别有用

装好后,创建一个 .vscode 文件夹,里面放 tasks.jsonlaunch.json。嗯,这里有个小坑——很多新手会忘记创建这两个文件,导致无法调试。我一般直接复制官方文档里的模板,改一下编译器路径就行。

三、第一个 C++ 程序:Hello, World!

不管学什么语言,第一个程序总是 Hello World。这几乎成了程序员的仪式感。来,直接上代码:

#include <iostream>

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

这段代码看起来简单,但里面有几个关键点,我当年学的时候可是踩过坑的:

  • #include <iostream>:这是输入输出流的头文件。没有它,cout 就用不了。
  • int main():程序的入口。C++ 规定 main 函数必须返回 int。
  • std::cout:标准输出流。那个 :: 是作用域解析符,表示 cout 属于 std 命名空间。
  • <<:流插入运算符。把右边的字符串“插入”到输出流里。
  • std::endl:换行并刷新缓冲区。用 \n 也可以,但 endl 更保险。
小技巧: 如果你觉得每次写 std:: 太麻烦,可以在文件开头写 using namespace std;。但我个人不建议在大型项目里这么做——容易引起命名冲突。我一般在练习时用,正式项目里还是老老实实写 std::。

四、输入输出流:与程序对话

4.1 标准输出流 cout

cout 我们已经见过了。它可以输出各种类型的数据:

#include <iostream>
#include <string>

int main() {
    int age = 25;
    double price = 19.99;
    std::string name = "小明";
    
    std::cout << "姓名: " << name << std::endl;
    std::cout << "年龄: " << age << " 岁" << std::endl;
    std::cout << "价格: " << price << " 元" << std::endl;
    
    return 0;
}

你看,cout 可以自动识别类型。int、double、string 都能直接输出。这在调试时特别方便——我在项目中经常用 cout 打印中间变量,比断点调试还快。

4.2 标准输入流 cin

有输出就有输入。cin 用来从键盘读取数据:

#include <iostream>

int main() {
    int number;
    std::cout << "请输入一个整数: ";
    std::cin >> number;
    std::cout << "你输入的是: " << number << std::endl;
    return 0;
}

这里用 >> 运算符,从 cin 中提取数据存入变量。注意,变量必须提前声明好类型。我曾经犯过一个错误——忘记初始化变量就直接用 cin 读取,结果程序行为变得很奇怪。

避坑指南: 当使用 cin 读取字符串时,遇到空格就会停止。比如输入 "Hello World",cin 只会读到 "Hello"。要读取整行,请用 getline(cin, str)

4.3 输入输出流的工作原理

你可能会好奇:cout 和 cin 到底是怎么工作的?其实它们背后是一个缓冲区机制。说白了,数据不会直接写到屏幕或从键盘读取,而是先存到一块内存区域里,等条件满足再统一处理。

我画了一张图,帮你理解这个过程:

C++ 输入输出流工作原理 键盘输入 数据流 输入缓冲区 (内存区域) cin >> 你的程序 (变量) cout << 输出缓冲区 (内存区域) 刷新 屏幕输出

从图上你可以看到:数据从键盘进入输入缓冲区,然后通过 cin >> 提取到程序变量中。程序处理完后,通过 cout << 送到输出缓冲区,最后刷新到屏幕上。

这个缓冲区机制有个好处:批量操作效率高。但也会带来问题——比如输出没有立即显示。这时候用 std::endl 强制刷新,就能保证数据立刻出现在屏幕上。

五、本章知识体系总览

最后,我用一张图把本章的核心内容串起来:

第一章:C++ 基础入门知识体系 C++ 基础入门 C++ 历史与发展 开发环境搭建 第一个 C++ 程序 C with Classes C++98/11/17/20 MinGW 编译器 VS Code 配置 环境变量 PATH #include <iostream> main() 函数 return 0; 输入输出流 (cin / cout)

这张图把本章的四个核心模块串在了一起。你可以看到,从历史背景到环境搭建,再到第一个程序和输入输出流,每一步都是环环相扣的。我个人觉得,理解了这个整体结构,后面的学习就会轻松很多。

本章要点回顾:

  • C++ 从 C 语言发展而来,加入了面向对象特性
  • MinGW + VS Code 是轻量高效的开发组合
  • 第一个 C++ 程序包含头文件、main 函数和输出语句
  • cin 和 cout 是标准输入输出流,背后有缓冲区机制

给新手的建议: 别急着往下学。先把环境配好,把 Hello World 跑起来。我见过太多人卡在环境配置上,结果放弃了。花点时间把这一步走稳,后面会顺利很多。


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