C++11新特性¶
在整个现代 C++ 演进里看,它主要做了四件事:
- 把旧式基础语法整体换代
- 把类型推导和局部表达拉进主流
- 把资源管理与值语义标准化
- 把并发基础设施正式纳入标准库
1 基础语法与对象模型¶
解决:旧式基础写法不够安全、不够清晰,资源转移与对象语义表达不足。
-
nullptr—— 空指针字面量
替代:NULL、0 -
range-based for —— 范围 for
替代:下标遍历、迭代器样板代码 -
enum class—— 强类型枚举
替代:传统enum污染作用域、隐式转整型 -
override / final—— 虚函数覆写约束
替代:仅靠人工判断覆写关系 -
=default / =delete—— 默认生成与显式禁用
替代:特殊成员函数行为表达不直接、禁止接口不明确 -
委托构造 / 继承构造 —— 构造组织能力增强
替代:构造逻辑重复、派生类构造转发啰嗦 -
列表初始化 —— 统一初始化语法
替代:多套初始化写法并存、部分场景易发生窄化或风格混乱 -
noexcept—— 异常保证声明
替代:旧异常规格写法弱且语义不清
C++11 把很多旧式基础写法整体换代。
这一层不是炫技特性,而是现代 C++ 代码风格的底板。
2 类型推导与接口表达¶
解决:类型书写冗长、模板上下文中类型难写、接口表达不够自然。
-
auto—— 自动类型推导
替代:显式长类型声明 -
decltype—— 表达式类型推导
替代:模板上下文中手写复杂类型 -
using—— 类型别名新写法
替代:typedef -
lambda —— 匿名函数对象
替代:手写仿函数、零散回调函数
C++11 先把“代码能不能更清晰地表达意图”这件事拉到语言层。
类型更少手写,局部逻辑更容易内联表达,接口组织开始现代化。
3 资源管理与值语义¶
解决:资源生命周期不稳定、对象拷贝成本高、临时值无法高效利用。
-
std::unique_ptr—— 独占所有权
替代:裸new / delete、手工释放 -
std::shared_ptr—— 共享所有权
替代:多处手工协调对象生命周期 -
std::weak_ptr—— 非拥有弱引用
替代:shared_ptr循环引用、悬垂观察者 -
右值引用 —— 临时对象绑定能力
替代:只能按左值体系处理对象 -
移动语义 —— 资源转移而非深拷贝
替代:不必要拷贝、容器扩容时高成本复制 -
std::move—— 显式转为右值
替代:隐式等待编译器猜测转移语义 -
std::forward—— 完美转发
替代:模板包装层丢失值类别
C++11 的核心转折之一,是把资源管理从“约定”推进为“类型系统表达”。
对象不再只是能不能拷贝,而是开始区分拥有、共享、转移与转发。
4 编译期与模板基础¶
解决:编译期计算能力弱、泛型接口表达贫乏、模板参数扩展不自然。
-
constexpr—— 编译期常量表达式
替代:宏常量、弱编译期函数能力 -
static_assert—— 编译期断言
替代:模板错误深层爆炸、约束难以前置表达 -
variadic templates —— 可变参数模板
替代:参数个数展开模板、C 风格可变参数 -
type traits 基础 —— 类型特征判断
替代:手工模板分发、弱约束元编程
C++11 让模板不再只服务于容器与算法,也开始服务于更完整的泛型接口组织。
虽然这一阶段表达仍偏重,但现代模板体系的基础已经立起来。
5 可调用对象与函数包装¶
解决:回调类型不统一、参数适配样板代码多、函数对象组织不自然。
-
std::function—— 通用可调用对象封装
替代:函数指针、接口不统一的回调类型 -
std::bind—— 参数绑定适配
替代:手写适配器、回调包装样板代码
这一层更偏工程组织,而不是编译期能力本体。
它让函数、lambda、成员函数绑定后的使用方式更统一。
6 并发与时间库¶
解决:线程能力依赖平台接口、加锁方式粗糙、等待与时间表达缺少统一标准。
-
std::thread—— 标准线程对象
替代:平台私有线程 API -
std::mutex—— 互斥锁
替代:平台私有锁接口 -
std::lock_guard—— RAII 加锁保护
替代:手工lock / unlock -
std::unique_lock—— 更灵活的锁控制
替代:锁管理能力较弱的简单加锁方式 -
std::condition_variable—— 条件变量
替代:轮询、自旋、平台专有等待机制 -
std::future—— 异步结果通道
替代:手工共享状态传递 -
std::promise—— 异步结果生产端
替代:线程间手工协议传值 -
std::async—— 标准异步启动接口
替代:手工线程封装任务执行 -
std::atomic—— 原子类型与原子操作
替代:部分轻量同步场景下完全依赖mutex -
std::chrono—— 标准时间库
替代:平台时间 API、裸整数表示时间
C++11 把并发基础设施正式纳入标准库。
从线程、锁、等待到时间表达,现代 C++ 的工程基线自这里开始。