C++11 新特性(c++11新特性 pdf)
一、核心语言革新
- 移动语义与右值引用
通过&&标识临时对象(右值),实现资源转移而非复制。例如移动构造函数将原对象资源指针转移后置空,避免深拷贝,极大优化容器操作性能。12 - 类型推导auto:自动推导变量类型(如迭代器for(auto it = vec.begin(); ...))34decltype:获取表达式类型,增强泛型编程灵活性35
- 智能指针
unique_ptr(独占所有权)、shared_ptr(引用计数)等替代裸指针,自动管理内存生命周期,减少泄漏风险。58
二、语法与结构优化
- Lambda表达式
匿名函数简化就地回调逻辑,例如:
std::sort(vec.begin(), vec.end(), [](int a, int b){ return a > b; });
- 范围for循环
简化容器遍历:for(auto& elem : container) {...} - 强类型枚举(enum class)
避免命名冲突,支持作用域限定:myEnum::Value - 统一初始化
使用{}统一初始化各类对象(如结构体、容器):
std::vector<int> v = {1, 2, 3};
struct S { int x; double y; } s{5, 3.14};
三、并发与库增强
- 多线程库
原生支持std::thread、std::mutex等,实现跨平台并发,替代平台相关API。57 - 线程池优化
通过任务队列与工作线程模型提升并发效率(参考线程池实现示例)13 - 委托构造与继承构造
简化构造函数重载,复用初始化逻辑。69
四、其他关键特性
特性 | 作用 | 示例 |
nullptr | 替代NULL,明确空指针类型 | int* p = nullptr; |
constexpr | 编译时计算常量表达式 | constexpr int sqr(int x){return x*x;} |
变长模板 | 支持任意数量模板参数 | 用于元组(std::tuple)实现 |
静态断言 | 编译期检查条件 | static_assert(sizeof(int)==4); |