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++ 的核心增量特性

  1. 面向对象:类、继承、多态,用对象组织复杂逻辑
  2. RAII:资源获取即初始化,用析构函数自动释放资源
  3. STL:标准模板库,提供 vector、string、algorithm 等开箱即用
  4. 模板与泛型:编写与类型无关的可复用代码
  5. 异常处理:结构化的错误处理机制

运算符、流程控制、循环等基础语法与 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++

  1. 创建 hello.cpp,写入上文示例代码
  2. 使用 g++ -std=c++17 -Wall hello.cpp -o hello 编译
  3. 运行并确认输出正确

练习2:对比 C 与 C++ 输出

分别编写 hello.chello.cpp,用 gccg++ 编译,观察两者输出是否一致。

练习3:思考

  • C++ 源文件为什么通常使用 .cpp 扩展名?
  • std::cout 中的 << 是什么运算符?(提示:流插入运算符,后续会学到)

六、总结与延伸

本节重点回顾

  1. C++ 诞生于 C 语言之上,1983 年正式命名,持续演进至 C++20/23
  2. C++ 兼容绝大部分 C 语法,并增加 OOP、模板、STL、RAII 等特性
  3. 建议先掌握 C 语言基础(至少 01~09 篇),再进入 C++ 专栏
  4. C++ 适用于游戏、系统编程、高性能计算等场景

下节预告

下一篇我们将学习《C++ 开发环境搭建:从安装到 Hello World》,配置 g++、VS Code C++ 插件与 CMake 基础。

延伸阅读


📌 知识点卡片

  • 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>

如果你有任何问题或想法,欢迎在评论区留言讨论!下一篇见!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐