各编译器对C++11的支持比较

转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2154

在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在核心语言级别支持的话应该有较大幅度的编译性能提升。

KlayGE游戏引擎

转载于:https://www.cnblogs.com/lapsang/archive/2013/02/07/2908830.html

[C++]各编译器对C++11的支持比较相关推荐

  1. Spring框架5.1将提供对Java 11的支持

    SpringOne Platform会议最近在华盛顿特区举行,会上发布和宣布了诸多事项.在9月25日上午的主题演讲中,Spring框架的联合创始人兼Pivotal的首席工程师Juergen Hoell ...

  2. Android11还能自定义相机吗,安卓用户又少了一项自由,Android 11不再支持更改默认相机程序...

    原标题:安卓用户又少了一项自由,Android 11不再支持更改默认相机程序 来源:量子位 关注前沿科技 萧萧 发自 凹非寺 量子位 报道 | 公众号 QbitAI 萧萧 发自 凹非寺 量子位 报道 ...

  3. Apache发布NetBeans 10.0,增强对JDK 11的支持

    Apache软件基金会最近发布了NetBeans 10.0,主要特性包括增强对JDK 11的支持.添加对JUnit 5的支持以及重新集成了PHP.JavaScript和Groovy模块.在路线图上,A ...

  4. linux g++开启C++11/14支持

    linux g++开启C++11/14支持 sudo vim ~/.bashrc 在some more ls aliases注释块的地方添加下面这两行: alias g++11='g++ -g -Wa ...

  5. 惊喜,Windows 11 竟然支持运行安卓应用,而且开发者收益 0 抽成,PC 端摸鱼不是梦...

    loonggg 读完需要 6 分钟 速读仅需 2 分钟 大家好,我是校长. 6 月 24 日,微软正式公布了下一代 Windows,也就是 Windows11,这是微软时隔六年带来的全新一代 Wind ...

  6. Windows 11 有望支持苹果 M1 Mac?微软和高通的秘密协议即将到期

    上个月 5 号,Windows 11 正式发布,虽然伴随着不断的骂声,但不可否认的是,还是有许多人想尝尝这"苹果味儿"的 Windows 界面,其中就包括部分 M1 Mac 用户. ...

  7. JAVA10和11什么时候_Java 11 正式发布 支持期限至2026年9月

    原标题:Java 11 正式发布 支持期限至2026年9月 美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布!这是自 Java 8 后的首个长期支持版本, ...

  8. 最新支持android的手机型号,科技知识:哪些手机可以升级安卓11 Android11支持机型大全...

    今天要来给大家介绍下哪些手机可以升级安卓11 Android11支持机型大全,之所以要来给大家针对这个哪些手机可以升级安卓11 Android11支持机型大全进行一个介绍的主要目的是现在很多小伙伴门对 ...

  9. 云原生周报 | Fluent Bit下载量达到10亿次;对 Istio 1.11的支持已经结束

    业界要闻 1. Fluent Bit下载量达到10亿次 摘要:如何快速有效地从企业中跨分布式环境创建的大量日志和事件数据中获取情报.这一问题变得越来越困难,随着组织迅速采用分布式.动态.云原生服务,这 ...

最新文章

  1. C# 写了个获取本机外网IP发送邮件的服务- 分享。
  2. 优秀的缓存工具Memcached
  3. 如何用纯 CSS 创作一个方块旋转动画
  4. LiveGBS无插件播放页面的集成----单独的播放器样式
  5. 【错误记录】编译 Linux 内核报错 ( /bin/sh: 1: flex: not found )
  6. Linux应用程序设计之网络基础编程
  7. 通过webpack配置vue项目页面title
  8. LDAP之一:OpenLDAP管理员指南资料
  9. mysql查询新建查询报错_mysql开启慢查询报错:
  10. JavaScript URL参数读取
  11. 基于模型的系统工程设计软件ModelCoder在航空发动机控制设计中的应用
  12. 小身材大用途,用PrimusUI驾驭你的页面
  13. Spring mvc介绍
  14. Qt程序启动画面QSplashScreen类
  15. 欧氏距离、巴氏距离、马氏距离的区别是什么
  16. nginx proxy_pass后的url加不加/的区别
  17. mmsegmentation自定义数据集
  18. 字节跳动新员工入职一周,工作很少,每天很闲,从不加班!公司一堆漂亮小姐姐!完全不像外面说得那么忙!
  19. ceph1--ceph基础/搭建ceph高可用集群
  20. 在物联网中应用机器学习

热门文章

  1. keil流水灯c语言程序两个一起亮,Keil单片机点亮一个灯及循环流水灯三种实现方法详解...
  2. oracle number 7 5,oracle上机练习6-7及答案
  3. python怎么改变button的颜色_python – 改变Kivy中Button的背景颜色
  4. 485通讯协议_HART协议和RS485协议有什么区别?
  5. flutter列表无法滚动到底部_在闲鱼实习做Flutter是什么感受?
  6. python+opencv+PIL,在图片和视频中写入中文(汉字)
  7. Python-OpenCV基本操作
  8. 卷积神经网络_mnist
  9. 快速定位NodeJs线上问题 - 之火焰图篇
  10. 顶级产品经理是如何写产品需求文档(PRD)的