一、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 上。
- 去 MinGW 官网下载安装器(mingw-get-setup.exe)。
- 安装时选择
mingw32-gcc-g++和mingw32-base。 - 把
C:\MinGW\bin添加到系统环境变量 PATH 中。
g++ --version,如果能显示版本号,就说明成功了。
2.3 配置 VS Code
VS Code 本身只是个编辑器,需要装插件才能变成 IDE。我建议装这几个:
- C/C++ 扩展(由 Microsoft 官方提供)
- Code Runner:一键运行代码,省事
- Bracket Pair Colorizer:括号匹配,写 C++ 时特别有用
装好后,创建一个 .vscode 文件夹,里面放 tasks.json 和 launch.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 读取,结果程序行为变得很奇怪。
getline(cin, str)。
4.3 输入输出流的工作原理
你可能会好奇:cout 和 cin 到底是怎么工作的?其实它们背后是一个缓冲区机制。说白了,数据不会直接写到屏幕或从键盘读取,而是先存到一块内存区域里,等条件满足再统一处理。
我画了一张图,帮你理解这个过程:
从图上你可以看到:数据从键盘进入输入缓冲区,然后通过 cin >> 提取到程序变量中。程序处理完后,通过 cout << 送到输出缓冲区,最后刷新到屏幕上。
这个缓冲区机制有个好处:批量操作效率高。但也会带来问题——比如输出没有立即显示。这时候用 std::endl 强制刷新,就能保证数据立刻出现在屏幕上。
五、本章知识体系总览
最后,我用一张图把本章的核心内容串起来:
这张图把本章的四个核心模块串在了一起。你可以看到,从历史背景到环境搭建,再到第一个程序和输入输出流,每一步都是环环相扣的。我个人觉得,理解了这个整体结构,后面的学习就会轻松很多。
本章要点回顾:
- C++ 从 C 语言发展而来,加入了面向对象特性
- MinGW + VS Code 是轻量高效的开发组合
- 第一个 C++ 程序包含头文件、main 函数和输出语句
- cin 和 cout 是标准输入输出流,背后有缓冲区机制
给新手的建议: 别急着往下学。先把环境配好,把 Hello World 跑起来。我见过太多人卡在环境配置上,结果放弃了。花点时间把这一步走稳,后面会顺利很多。
公众号:蓝海资料掘金营,微信deep3321