B-1 C++11 简介
什么是C++11?
2011年8月12日,国际标准化组织(International Organization for Standardization,简称ISO)批准了C++的新版本——C++11。C++11为C++语言增添了一整套全新特性!这些新特性的使用完全可选——但其中某些特性无疑会对您有所助益。此前所有教程均已更新为符合C++11标准。
C++11的目标与设计
Bjarne Stroustrup将C++11的目标概括如下:
- 发挥C++的优势——与其将C++扩展到其可能较弱的新领域(例如需要大量GUI的Windows应用程序),不如专注于使其在擅长的领域表现得更出色。
- 降低C++的学习、使用和教学门槛——提供增强语言一致性与易用性的功能特性。
为此,制定标准的委员会遵循以下基本原则:
- 尽可能保持与旧版C++及C语言的稳定兼容性。在C++03环境下运行的程序通常应能在C++11环境中继续运行。
- 将核心语言扩展数量控制在最低限度,主要变更集中在标准库中(本次发布未能很好地实现这一目标)
- 专注于改进抽象机制(类、模板),而非为特定狭窄场景添加新机制。
- 为新手和专家均增添新功能。人人皆有所获!
- 增强类型安全性,避免无意中的错误。
- 提升性能并允许C++直接操作硬件。
- 考虑可用性与生态系统问题。C++需与其他工具良好协作,易于使用和教学等...
C++11在主题上并未大幅偏离C++03,但确实新增了大量功能。
C++11的主要新特性
为方便您了解,以下列出了C++11新增的主要特性。请注意,此列表并非详尽无遗,而是旨在突出一些关键的、值得关注的特性。
- auto(10.8 -- 使用auto关键字的对象类型推导)
- char16_t与char32_t及支持它们的新字面量(暂无教程)
- constexpr(5.1 -- 常量变量(命名常量))
- decltype(见16.7 -- 数组、循环与符号挑战解决方案)
- 默认构造函数指定符 (14.11 -- 默认构造函数与默认实参)
- 委托构造函数 (14.12 -- 委托构造函数)
- delete 指定符 (11.4 -- 删除函数)
- 枚举类 (13.6 -- 作用域枚举 (枚举类))
- 外部模板 (暂无教程)
- lambda表达式(20.6节——引入lambda表达式(匿名函数))与捕获(20.7节——lambda捕获)
- long long int(4.3节——对象大小与sizeof运算符)
- 移动构造函数与移动赋值(22.3节——移动构造函数与移动赋值)
- Noexcept限定符(27.4节——未捕获异常与全捕获处理器处理)
- nullptr(12.8节——空指针)
- override与final限定符(25.3节——覆盖限定符、最终限定符及协变返回类型)
- 基于范围的 for 语句 (16.8 -- 基于范围的 for 循环 (for-each))
- 右值引用 (22.2 -- 右值引用)
- static_assert (9.6 -- assert 与 static_assert)
- std::initializer_list (23.7 -- std::initializer_list)
- 尾随返回类型语法(10.8 -- 使用auto关键字的对象类型推导)
- 类型别名(10.7 -- 类型别名与typedef)
- typedef现可定义模板类
- 统一初始化(4.1 -- 基础数据类型介绍)
- 用户定义常量(暂无教程)
- 可变参数模板(暂无教程)
- 两个无空格分隔的 >> 符号将正确解释为闭合模板对象
C++标准库中还提供了许多可供使用的新类。
- 对多线程和线程局部存储的更好支持(暂无教程)
- 哈希表(暂无教程)
- 随机数生成改进(8.14节——使用梅森扭转器生成随机数基础讨论)
- 引用包装器(25.9节——对象切片)
- 正则表达式(暂无教程)
- std::auto_ptr 已弃用(22.1节——智能指针与移动语义入门)
- std::tuple(暂无教程)
- std::unique_ptr(22.5节——std::unique_ptr)

浙公网安备 33010602011771号