[C++]各编译器对C++11的支持比较
各编译器对C++11的支持比较
在KlayGE首次引入C++11特性之后,我顺便调研了一下个主流编译器对C++11的支持度,以便在下个版本中加入更多的C++11元素。这里还列出了在不支持的时候,可以采用的替代方案。主要参考了C++11 Features in Visual C++ 11,Status of Experimental C++0x Support in GCC 4.6,Status of Experimental C++0x Support in GCC 4.7,Boost。
C++11 Core Language Features
VC 10 | VC 11 | GCC 4.6 | GCC 4.7 | 替代方案 | |
Rvalue references | Yes | Yes | Yes | Yes | Boost.Move |
Rvalue references for *this | No | No | No | No | |
Non-static data member initializers | No | No | No | Yes | |
Variadic templates | No | No | Yes | Yes | |
Initializer lists | No | No | Yes | Yes | |
static_assert | Yes | Yes | Yes | Yes | Boost.Static Assert |
auto | Yes | Yes | Yes | Yes | Boost.Typeof |
Trailing return types | Yes | Yes | Yes | Yes | Boost.ReturnType |
Lambdas | Yes | Yes | Yes | Yes | Boost.Lambda |
decltype | Yes | Yes | Yes | Yes | Boost.Typeof |
Right angle brackets | Yes | Yes | Yes | Yes | TR1 |
Default template arguments for function templates | No | No | Yes | Yes | |
Expression SFINAE | No | No | Yes | Yes | |
Alias templates | No | No | No | Yes | |
Extern templates | Yes | Yes | Yes | Yes | |
nullptr | Yes | Yes | Yes | Yes | 自己实现的null_ptr |
Strongly typed enums | No | Yes | Yes | Yes | #define |
Forward declared enums | No | Yes | Yes | Yes | |
Attributes | No | No | No | No | |
constexpr | No | No | Yes | Yes | |
Alignment | No | No | No | No | |
Delegating constructors | No | No | No | Yes | |
Inheriting constructors | No | No | No | No | |
Explicit conversion operators | No | No | Yes | Yes | |
char16_t and char32_t | No | No | Yes | Yes | |
Unicode string literals | No | No | Yes | Yes | |
Raw string literals | No | No | Yes | Yes | |
Universal character names in literals | No | No | Yes | Yes | |
User-defined literals | No | No | No | Yes | |
Standard-layout and trivial types | No | Yes | Yes | Yes | |
Defaulted and deleted functions | No | No | Yes | Yes | |
Extended friend declarations | Yes | Yes | No | Yes | |
Extended sizeof | No | No | No | Yes | |
Inline namespaces | No | No | Yes | Yes | |
Unrestricted unions | No | No | Yes | Yes | |
Local and unnamed types as template arguments | Yes | Yes | Yes | Yes | |
Range-based for-loop | No | Yes | Yes | Yes | Boost.Foreach |
override and final | No | Yes | No | Yes | #define |
Minimal GC support | Yes | Yes | No | No | |
noexcept | No | No | Yes | Yes |
C++11 Core Language Features: Concurrency
VC 10 | VC 11 | GCC 4.6 | GCC 4.7 | 替代方案 | |
Reworded sequence points | No | No | No | No | |
Atomics | No | Yes | No | Yes | Boost.Atomic |
Strong compare and exchange | No | Yes | No | No | |
Bidirectional fences | No | Yes | No | No | |
Memory model | No | No | No | No | |
Data-dependency ordering | No | Yes | No | No | |
Data-dependency ordering: function annotation | No | No | No | No | |
exception_ptr | Yes | Yes | Yes | Yes | Boost.Exception |
quick_exit and at_quick_exit | No | No | No | No | |
Atomics in signal handlers | No | No | No | No | |
Thread-local storage | No | No | No | No | Boost.Thread |
Magic statics | No | No | No | No |
C++11 Core Language Features: C99
VC 10 | VC 11 | GCC 4.6 | GCC 4.7 | 替代方案 | |
__func__ | No | No | Yes | Yes | __FUNCTION__ |
C99 preprocessor | No | No | Yes | Yes | |
long long | Yes | Yes | Yes | Yes | __int64 |
Extended integer types | No | No | No | No |
C++11 Library
VC 10 | VC 11 | GCC 4.6 | GCC 4.7 | 替代方案 | |
shared_ptr, weak_ptr | Yes | Yes | Yes | Yes | Boost.SmartPtr |
make_/allocate_shared, owner_before | Yes | Yes | Yes | Yes | Boost.SmartPtr |
unique_ptr | Yes | Yes | Yes | Yes | Boost.Interprocess |
Fixed-Size Arrays | Yes | Yes | Yes | Yes | Boost.Arrays |
Hash Tables | Yes | Yes | Yes | Yes | Boost.Unordered |
Singly-linked list | Yes | Yes | Yes | Yes | Boost.Container |
Regular Expressions | Yes | Yes | Yes | Yes | Boost.Regex |
Tuple | Yes | Yes | Yes | Yes | Boost.Tuple |
Random Numbers & Distributions | Yes | Yes | Yes | Yes | Boost.Random |
Type Traits | Yes | Yes | Yes | Yes | Boost.TypeTraits |
Generalized Function Pointers | Yes | Yes | Yes | Yes | Boost.Function |
Generalized Binders | Yes | Yes | Yes | Yes | Boost.Bind |
Generalized Member Function Adapters | Yes | Yes | Yes | Yes | Boost.Bind |
Reference Wrappers | Yes | Yes | Yes | Yes | Boost.Ref |
Return type calculation | Yes | Yes | Yes | Yes | Boost.ReturnType |
New algorithms | Yes | Yes | Yes | Yes | Boost.Algorithm |
Time | No | No | Yes | Yes | Boost.Chrono |
其中,斜体的Yes表示VC 11和GCC 4.7都支持,同时还有非C++11的替代方案,所以很可能在下一版本的KlayGE中使用到。从上面的表可以看出,Library的支持度相当好。即使编译器不支持,也可以很容易地用Boost替换掉。语言核心则还远不到完美,但最常用的基本都已经涵盖了。有些feature,比如foreach和auto,用Boost在库级别支持,对编译速度有很大影响。换用C++11在核心语言级别支持的话应该有较大幅度的编译性能提升。
转载于:https://www.cnblogs.com/lapsang/archive/2013/02/07/2908830.html
[C++]各编译器对C++11的支持比较相关推荐
- Spring框架5.1将提供对Java 11的支持
SpringOne Platform会议最近在华盛顿特区举行,会上发布和宣布了诸多事项.在9月25日上午的主题演讲中,Spring框架的联合创始人兼Pivotal的首席工程师Juergen Hoell ...
- Android11还能自定义相机吗,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...
原标题:安卓用户又少了一项自由,Android 11不再支持更改默认相机程序 来源:量子位 关注前沿科技 萧萧 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧萧 发自 凹非寺 量子位 报道 ...
- Apache发布NetBeans 10.0,增强对JDK 11的支持
Apache软件基金会最近发布了NetBeans 10.0,主要特性包括增强对JDK 11的支持.添加对JUnit 5的支持以及重新集成了PHP.JavaScript和Groovy模块.在路线图上,A ...
- linux g++开启C++11/14支持
linux g++开启C++11/14支持 sudo vim ~/.bashrc 在some more ls aliases注释块的地方添加下面这两行: alias g++11='g++ -g -Wa ...
- 惊喜,Windows 11 竟然支持运行安卓应用,而且开发者收益 0 抽成,PC 端摸鱼不是梦...
loonggg 读完需要 6 分钟 速读仅需 2 分钟 大家好,我是校长. 6 月 24 日,微软正式公布了下一代 Windows,也就是 Windows11,这是微软时隔六年带来的全新一代 Wind ...
- Windows 11 有望支持苹果 M1 Mac?微软和高通的秘密协议即将到期
上个月 5 号,Windows 11 正式发布,虽然伴随着不断的骂声,但不可否认的是,还是有许多人想尝尝这"苹果味儿"的 Windows 界面,其中就包括部分 M1 Mac 用户. ...
- JAVA10和11什么时候_Java 11 正式发布 支持期限至2026年9月
原标题:Java 11 正式发布 支持期限至2026年9月 美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布!这是自 Java 8 后的首个长期支持版本, ...
- 最新支持android的手机型号,科技知识:哪些手机可以升级安卓11 Android11支持机型大全...
今天要来给大家介绍下哪些手机可以升级安卓11 Android11支持机型大全,之所以要来给大家针对这个哪些手机可以升级安卓11 Android11支持机型大全进行一个介绍的主要目的是现在很多小伙伴门对 ...
- 云原生周报 | Fluent Bit下载量达到10亿次;对 Istio 1.11的支持已经结束
业界要闻 1. Fluent Bit下载量达到10亿次 摘要:如何快速有效地从企业中跨分布式环境创建的大量日志和事件数据中获取情报.这一问题变得越来越困难,随着组织迅速采用分布式.动态.云原生服务,这 ...
最新文章
- C# 写了个获取本机外网IP发送邮件的服务- 分享。
- 优秀的缓存工具Memcached
- 如何用纯 CSS 创作一个方块旋转动画
- LiveGBS无插件播放页面的集成----单独的播放器样式
- 【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: flex: not found )
- Linux应用程序设计之网络基础编程
- 通过webpack配置vue项目页面title
- LDAP之一:OpenLDAP管理员指南资料
- mysql查询新建查询报错_mysql开启慢查询报错:
- JavaScript URL参数读取
- 基于模型的系统工程设计软件ModelCoder在航空发动机控制设计中的应用
- 小身材大用途,用PrimusUI驾驭你的页面
- Spring mvc介绍
- Qt程序启动画面QSplashScreen类
- 欧氏距离、巴氏距离、马氏距离的区别是什么
- nginx proxy_pass后的url加不加/的区别
- mmsegmentation自定义数据集
- 字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!
- ceph1--ceph基础/搭建ceph高可用集群
- 在物联网中应用机器学习
热门文章
- keil流水灯c语言程序两个一起亮,Keil单片机点亮一个灯及循环流水灯三种实现方法详解...
- oracle number 7 5,oracle上机练习6-7及答案
- python怎么改变button的颜色_python – 改变Kivy中Button的背景颜色
- 485通讯协议_HART协议和RS485协议有什么区别?
- flutter列表无法滚动到底部_在闲鱼实习做Flutter是什么感受?
- python+opencv+PIL,在图片和视频中写入中文(汉字)
- Python-OpenCV基本操作
- 卷积神经网络_mnist
- 快速定位NodeJs线上问题 - 之火焰图篇
- 顶级产品经理是如何写产品需求文档(PRD)的