我是一名工作了17年的C++程序员.我儿子上4年级了, 前段时间他跟我说他想学编程。我就想把我这些年编程的一经验和感悟整理成笔记记录下来,然后教给他。同时也分享给想入门C++编程的朋友们。
今天先开个头,想说说我对C++的感觉。我学C++已经有20年了,对它已经有了感悟。但是至今不敢说完全掌握了C++,它还是那么的博大精深。市面上都说C++太复杂了,难入门,难精通。其实我觉得如果方法对了,循序渐进还是没那么难的。
标题用的现代C++,那么在这里就先简单地介绍一下C++的发展历程吧。
C++ 是由丹麦计算机科学家Bjame Stroustrup发明的。最初被命名为带类的C语言。从诞生到现在C++一直处在发展变化的过程中。下面是关键节点:
1. 诞生:从 "C with Classes" 开始(1979-1983)
- 创始人:Bjarne Stroustrup(贝尔实验室)
- 目标:在 C 语言基础上增加类(class)和对象的概念,用于仿真项目。
- 名字演变:最初叫 "C with Classes" → 1983 年正式改名 C++(
++
表示比 C 更进一步的增强)。
2. 早期标准化(1985-1998)
- 1985:首个商业编译器 CFront 1.0 发布(基于 C 的转译器)。
- 1989:C++ 2.0 加入多重继承、抽象类、模板雏形。
- 1998:首个国际标准 C++98(ISO/IEC 14882:1998):
- 确立 STL(标准模板库)(容器、迭代器、算法)
- 明确 异常处理、RTTI(运行时类型识别)
3. 停滞与反思(2003-2011)
- 2003:C++03(小修小补,修复 C++98 的问题)。
- 2000s 中期:Java/C# 崛起,C++ 被质疑“太复杂”,但高性能领域仍不可替代(游戏引擎、高频交易)。
4. 现代 C++ 革命(2011 至今)
C++11(2011)
被称为**“新时代的起点”**,核心改进:
- 自动类型推导:
auto
,decltype
- 移动语义:
右值引用
(解决对象拷贝性能问题) - Lambda 表达式:
[](){}
简化回调 - 智能指针:
unique_ptr
,shared_ptr
(减少内存泄漏) - 并发支持:
std::thread
,原子操作
后续版本快速迭代(每 3 年一版):
- C++14(2014):泛型 Lambda、二进制字面量(
0b1100
) - C++17(2017):结构化绑定、
std::filesystem
(文件系统库) - C++20(2020):概念(Concepts)(约束模板)、协程(Coroutines)
- C++23(2023):
std::print
(格式化输出)、多维数组视图
为什么 C++ 经久不衰?
- 性能可控:直接操作硬件、零成本抽象。
- 生态庞大:从嵌入式到超算,跨领域支持。
- 持续进化:吸收现代语言特性(如函数式编程元素)。
未来趋势
- 模块化(减少头文件依赖)
- 更安全的抽象(如契约编程)
- 与 Rust 的:在内存安全领域互补共存。
C++11标准发布之后的C++被称为现代C++。目前C++最新标准版本是C++23,但主流的编译都还没有完全实现对C++23特性的支持。所以在我后续的笔记中将以C++20为基础,选择微软的Visual C++作为编译器。