C++11 主要功能特性一览
特性 | 描述 | 提案 | GCC | Clang | MSVC | Apple Clang | EDG eccp | Intel C++ | Nvidia HPC C++ (ex PGI)* | Nvidia nvcc | Cray | Embarcadero C++ Builder | IBM Open XL C++ for AIX | IBM Open XL C++ for z/OS | IBM XL C++ | Sun/Oracle C++ | HP aCC | Digital Mars C++ | 核心功能 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
右值引用 (T&& ) | 支持移动语义和完美转发的基础。 | N2118 | 4.3 | 3.0 | VS2010 | 4.3 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
默认和删除的函数 (=default , =delete ) | 显式指定默认构造/析构、禁用拷贝等。 | N2346 | 4.4 | 3.0 | VS2013 | 4.4 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
auto 类型推导 | 编译器根据初始化值自动推断类型。 | N1984 | 4.4 | 2.9 | VS2010 | 4.4 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
范围 for 循环 (for (auto x : container) ) | 简洁遍历容器。 | N2930 | 4.6 | 3.0 | VS2012 | 4.6 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
基于列表的初始化 ({} ) | 支持统一初始化语法。 | N2640 | 4.4 | 3.1 | VS2013 | 4.4 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
委托构造函数 | 一个构造函数调用另一个构造函数。 | N1986 | 4.7 | 3.3 | VS2013 | 5.0 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 否 |
继承构造函数 | 派生类继承基类构造函数。 | N2540 | 4.8 | 3.3 | VS2013 | 5.0 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 否 |
nullptr | 替代 NULL ,更安全明确的空指针类型。 | N2431 | 4.6 | 3.0 | VS2010 | 4.6 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
强类型枚举 (enum class ) | 枚举值不泄漏到外部作用域。 | N2347 | 4.4 | 3.0 | VS2012 | 4.4 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
静态断言 (static_assert ) | 编译期检查条件。 | N1720 | 4.3 | 2.9 | VS2010 | 4.3 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
变长模板 (template<typename... Args> ) | 支持任意数量模板参数。 | N2242 | 4.3 | 3.0 | VS2013 | 4.3 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
类型推导 (decltype ) | 推导表达式的类型。 | N2343 | 4.3 | 3.0 | VS2010 | 4.3 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
尾返回类型 (auto func() -> type ) | 用于返回类型依赖模板参数的场景。 | N2541 | 4.4 | 3.0 | VS2010 | 4.4 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 否 |
constexpr 函数 | 编译期求值函数。 | N2235 | 4.6 | 3.1 | VS2015 | 4.6 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
noexcept 说明符 | 指示函数不会抛出异常。 | N3050 | 4.6 | 3.0 | VS2015 | 4.6 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 否 |
override 和 final | 明确重写虚函数、阻止进一步重写。 | N2928 | 4.7 | 3.3 | VS2012 | 5.0 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 否 |
用户定义字面值(Literal) | 定义自定义的字面量操作(如 "100"_cm )。 | N2765 | 4.7 | 3.1 | VS2015 | 5.0 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 否 |
多线程内存模型 | 提供对并发的内建支持。 | N2429 | 4.1 | 3.1 | VS2012 | 4.1 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 不支持 | 不支持 | 不支持 | 是 |
📚 C++11 标准库新特性
模块 / 类别 | 描述 |
---|---|
<thread> 线程库 | 支持多线程(std::thread 、std::mutex 、std::lock_guard 等)。 |
智能指针 | std::shared_ptr 、std::unique_ptr 、std::weak_ptr 。 |
正则表达式 | std::regex 、std::regex_search 、std::regex_match 等。 |
时间库 | std::chrono ,精确时间度量与时间段。 |
随机数库 | std::mt19937 、std::uniform_int_distribution 等。 |
类型 traits | std::is_same 、std::enable_if 、std::remove_reference 等。 |
元编程工具 | std::tuple 、std::integer_sequence 、std::integral_constant 。 |
可调用对象封装 | std::function 、std::bind 、std::ref 。 |
std::array | 定长数组容器。 |
std::forward_list | 单向链表容器。 |
std::unordered_map/set | 基于哈希的容器。 |
并发工具 | std::future 、std::promise 、std::async 、std::atomic 。 |
std::to_string 、std::stoi 等函数 | 字符串与数值互转的便捷接口。 |
<initializer_list> | 支持 {} 初始化列表。 |
容器增强 | 支持移动语义的构造函数和 emplace 插入方法。 |
std::move 、std::forward | 用于移动语义和完美转发。 |