C++入门:从C到现代C++
C++入门:从C到现代C++
在C语言基础上再进一步
如果你已经学习了 C 语言入门:为什么它是编程的基石,那么你已经掌握了变量、函数、指针这些编程世界的「砖块」。C++ 并不是一门全新的语言——它诞生于 C 语言之上,保留了 C 的高效与灵活,又在此基础上加入了面向对象、泛型编程等强大能力。
今天,让我们一起了解 C++ 的前世今生,以及为什么它在 C 之后值得继续学习。
一、C++ 的前世今生
1.1 诞生背景:C 语言的进化
C++ 由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计,最初称为「C with Classes」。1983 年正式命名为 C++(「++」表示在 C 基础上递增、增强)。
历史节点:
- 1979 年:Bjarne Stroustrup 开始设计 C with Classes
- 1983 年:正式命名为 C++
- 1985 年:《The C++ Programming Language》出版
- 1998 年:第一个 ISO 标准 C++98 发布
- 2011 年:C++11 重大更新(智能指针、auto、范围 for 等)
- 2014/2017/2020:C++14、C++17、C++20 持续演进
1.2 设计哲学:C 的效率 + 更高的抽象
C 语言的设计哲学是「相信程序员」,给予极大自由。C++ 继承了这一传统,同时提供了更高层次的抽象工具:
#include <iostream>
int main() {
std::cout << "Hello, C++!" << std::endl;
return 0;
}
与 C 的 printf 相比,std::cout 是类型安全的流式输出——编译器会在编译期检查类型是否匹配。
1.3 影响力:无处不在的 C++
| 领域 | 应用举例 |
|---|---|
| 游戏引擎 | Unreal Engine、Unity 核心模块 |
| 浏览器 | Chrome、Firefox 渲染引擎 |
| 操作系统 | Windows 内核、macOS 部分组件 |
| 数据库 | MySQL、MongoDB 核心 |
| 嵌入式 | 高性能实时系统 |
| 金融 | 低延迟交易系统 |
二、C 与 C++ 的关系
2.1 兼容性:C++ 是 C 的超集(几乎)
绝大多数合法的 C 代码可以直接用 C++ 编译器编译(需注意少数差异,如 void* 隐式转换)。这意味着你在 C 语言中学到的知识,在 C++ 中依然有效。
| 特性 | C | C++ |
|---|---|---|
| 基本语法 | 支持 | 完全兼容 |
| 指针与内存 | 手动管理 | 支持 + 智能指针(RAII) |
| 组织方式 | 函数 + 结构体 | 函数 + 类 + 命名空间 |
| 标准库 | 较小(stdio.h 等) | 丰富(STL:vector、map 等) |
| 函数 | 无重载 | 支持重载 |
| 泛型 | 无 | 模板 |
2.2 C++ 的核心增量特性
- 面向对象:类、继承、多态,用对象组织复杂逻辑
- RAII:资源获取即初始化,用析构函数自动释放资源
- STL:标准模板库,提供 vector、string、algorithm 等开箱即用
- 模板与泛型:编写与类型无关的可复用代码
- 异常处理:结构化的错误处理机制
运算符、流程控制、循环等基础语法与 C 相同,详见 C 语言核心语法。本专栏后续章节将聚焦 C++ 独有的扩展。
2.3 为什么学完 C 再学 C++
| 理由 | 说明 |
|---|---|
| 理解底层 | C 让你理解内存与指针;C++ 在此之上构建抽象 |
| 避免困惑 | 先掌握 C 基础,再学 C++ 特性时不会迷失 |
| 职业需求 | 系统编程、游戏开发、高性能计算普遍要求 C/C++ |
| 标准演进 | 现代 C++(C++11 起)大幅简化内存管理与容器使用 |
三、C++ 的应用场景
3.1 适合用 C++ 的场景
- 性能敏感:游戏、实时系统、高频交易
- 系统级编程:操作系统组件、驱动、编译器
- 大型工程:需要 OOP 与模块化的大型项目
- 跨平台库:Qt、Boost 等基础设施
3.2 何时继续用 C
- 嵌入式资源极度受限(仅 C 编译器)
- 维护遗留 C 代码库
- 学习计算机底层原理(C 更「纯粹」)
四、第一个 C++ 程序
如果你已完成 C 语言环境配置,通常已安装 g++。下面是一个最小 C++ 程序:
#include <iostream>
int main() {
std::cout << "Hello, C++!" << std::endl;
std::cout << "从 C 到 C++,继续编程之旅!" << std::endl;
return 0;
}
编译运行:
g++ -std=c++17 hello.cpp -o hello
./hello # Linux/macOS/WSL
hello.exe # Windows
与 C 版本的对比:
/* C 版本 */
#include <stdio.h>
int main() {
printf("Hello, C!\n");
return 0;
}
| 对比项 | C | C++ |
|---|---|---|
| 头文件 | stdio.h |
iostream |
| 输出 | printf |
std::cout |
| 命名空间 | 无 | std |
| 源文件扩展名 | .c |
.cpp |
五、实战练习
练习1:编译运行 Hello C++
- 创建
hello.cpp,写入上文示例代码 - 使用
g++ -std=c++17 -Wall hello.cpp -o hello编译 - 运行并确认输出正确
练习2:对比 C 与 C++ 输出
分别编写 hello.c 和 hello.cpp,用 gcc 和 g++ 编译,观察两者输出是否一致。
练习3:思考
- C++ 源文件为什么通常使用
.cpp扩展名? std::cout中的<<是什么运算符?(提示:流插入运算符,后续会学到)
六、总结与延伸
本节重点回顾
- C++ 诞生于 C 语言之上,1983 年正式命名,持续演进至 C++20/23
- C++ 兼容绝大部分 C 语法,并增加 OOP、模板、STL、RAII 等特性
- 建议先掌握 C 语言基础(至少 01~09 篇),再进入 C++ 专栏
- C++ 适用于游戏、系统编程、高性能计算等场景
下节预告
下一篇我们将学习《C++ 开发环境搭建:从安装到 Hello World》,配置 g++、VS Code C++ 插件与 CMake 基础。
延伸阅读
- C 语言入门:为什么它是编程的基石
- C++ 教程首页
- cppreference.com — C++ 权威参考
📌 知识点卡片
- C++ 由 Bjarne Stroustrup 设计,是 C 语言的扩展与增强
- 核心增量:类、模板、STL、RAII、异常、命名空间
- 源文件扩展名:
.cpp;编译器:g++/clang++ - 建议先修:C 语言 01~09 篇
💡 小技巧
- 编译时加上
-std=c++17 -Wall启用现代标准与常见警告 - 初学阶段优先使用
std::cout而非 C 风格printf,体会类型安全
⚠️ 注意事项
- 不要用 C 的思维写 C++(例如过度使用裸指针而忽略 RAII)
- C++ 标准库头文件通常不带
.h后缀(如#include <iostream>)
如果你有任何问题或想法,欢迎在评论区留言讨论!下一篇见!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)