[C++11] : 划时代的里程碑
目录
- 前言
- C++ 版本整体概述
- 基石版本:C++98 详细介绍
- 革新版本:C++11 详细介绍
- C++98 与 C++11 核心定位区别
- 本篇博客说明 & 后续规划
- 总结
前言
之前的博客中,我们简单入门了解了 STL 标准模板库的基础概念,相信大家对 C++ 的标准组件有了初步认知。
想要学好 C++,只会用 STL 是远远不够的,我们必须了解 C++ 的版本迭代。C++ 发展至今有多个标准化版本,其中最重要、最具代表性的两个版本就是C++98和C++11。
本篇博客大家搞懂这两个核心版本的区别、地位和学习意义,为后续深入学习 C++11 语法特性打好基础。
C++ 版本整体概述
C++ 语言并非一成不变,从诞生至今,官方会每隔数年更新一次标准,修复旧版本缺陷、新增语法特性、优化编译机制,让代码更简洁、安全、高效。
在所有版本中,有两个版本是绝对绕不开的核心版本,也是所有 C++ 开发者的必修内容:
1、C++98:C++ 首个官方标准化版本,C++ 语言的基石
2、C++11:C++ 现代化的里程碑版本,颠覆性升级
后续的 C++14、C++17、C++20 等新版本,都是在 C++11 的基础上做优化和补充,掌握 C++11 是学习所有新版 C++ 的前提。
基石版本:C++98 详细介绍
C++98是 1998 年正式发布的 C++ 第一个国际标准化版本,也是 C++ 语言真正走向规范化、工业化的开端。
在 C++98 之前,C++ 语法杂乱、没有统一标准,不同编译器的编译规则、语法支持各不相同,代码兼容性极差,根本无法用于大型项目开发。
C++98 的诞生彻底解决了这个问题,核心贡献主要有两点:
1、统一了 C++ 核心语法规范,固定了面向对象、类、继承、多态、模板等基础语法规则
2、正式引入并标准化了 STL 标准模板库,包含容器、算法、迭代器等核心组件
简单来说:我们现在学习的 C++ 基础语法,绝大部分都源自 C++98 版本。
但 C++98 存在非常多的短板:语法繁琐、代码冗余、缺少便捷特性、内存管理容易出错、不支持高效泛型编程,很难开发高并发、高性能、高安全性的项目。这也是后续 C++11 紧急更新的核心原因。
革新版本:C++11 详细介绍
C++11是 2011 年发布的 C++ 官方标准版本,也是 C++ 历史上改动最大、意义最深远的一次升级,被业内称为「C++ 现代化革命」。
和小修小补的版本更新不同,C++11 并不是简单修复 bug,而是新增了上百个语法特性和底层优化,彻底弥补了 C++98 的所有短板。
对于新手开发者而言,C++11 的核心优势可以总结为三点:
1、代码更简洁:简化了大量冗余写法,减少重复代码,开发效率大幅提升
2、代码更安全:新增智能指针、空指针规范等特性,大幅规避内存泄漏、野指针等经典 bug
3、功能更强大:支持 Lambda 表达式、自动类型推导、范围 for 循环、多线程等现代化特性
目前所有企业级项目、开源框架、算法工程,全部基于 C++11 及以上版本开发。如果只学 C++98,写出的代码老旧、低效,完全无法适配现代开发场景。
C++98 与 C++11 核心定位区别
很多新手分不清两个版本的学习定位,这里给大家直白总结:
- C++98:基础入门必备,用来掌握 C++ 底层核心语法、面向对象思想、STL 基础使用,是打基础的版本
- C++11:实战开发必备,是现代 C++ 的标准,是从「入门语法」走向「实战开发」的分水岭
本篇博客说明 & 后续规划
为了让大家循序渐进学习,本篇仅做版本发展史和定位介绍,不讲解任何具体 C++11 语法,避免新手知识点混乱。
后续我会更新一系列专属博客,逐个拆解 C++11 核心高频语法,专门适配新手学习,重点讲解大家最常用、面试和开发必考的特性:
| 序号 | 知识点 |
|---|---|
| 1 | auto 自动类型推导 |
| 2 | 范围 for 循环用法 |
| 3 | 列表初始化 |
| 4 | 类型别名using |
| 5 | 原子操作atomic |
| 6 | 表示空指针的方式nullptr |
| 7 | 默认构造函数(default和delete) |
| 8 | enum class强类型枚举 |
| 9 | C++11 多线程基础特性 |
| 10 | 移动语义和std::move 右值引用 |
| 11 | Lambda 匿名函数,函数式编程 |
| 12 | 智能指针 |
总结
1、C++98是 C++ 标准化的基石,奠定了所有基础语法和 STL 框架,是新手入门的必经阶段。
2、C++11是 C++ 现代化的里程碑,是现代开发的通用标准,是进阶实战的核心。
3、学习顺序:先掌握 C++98 基础(特别是stl),再系统学习 C++11 新特性,两者结合才算完整掌握现代 C++。
