各编译器对C++11的支持比较
来源:互联网 发布:五十而知天命什么意思 编辑:程序博客网 时间:2024/05/21 08:55
转载自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 10VC 11GCC 4.6GCC 4.7替代方案Rvalue referencesYesYesYesYesBoost.MoveRvalue references for *thisNoNoNoNo Non-static data member initializersNoNoNoYes Variadic templatesNoNoYesYes Initializer listsNoNoYesYes static_assertYesYesYesYesBoost.Static AssertautoYesYesYesYesBoost.TypeofTrailing return typesYesYesYesYesBoost.ReturnTypeLambdasYesYesYesYesBoost.LambdadecltypeYesYesYesYesBoost.TypeofRight angle bracketsYesYesYesYesTR1Default template arguments for function templatesNoNoYesYes Expression SFINAENoNoYesYes Alias templatesNoNoNoYes Extern templatesYesYesYesYes nullptrYesYesYesYes自己实现的null_ptrStrongly typed enumsNoYesYesYes#defineForward declared enumsNoYesYesYes AttributesNoNoNoNo constexprNoNoYesYes AlignmentNoNoNoNo Delegating constructorsNoNoNoYes Inheriting constructorsNoNoNoNo Explicit conversion operatorsNoNoYesYes char16_t and char32_tNoNoYesYes Unicode string literalsNoNoYesYes Raw string literalsNoNoYesYes Universal character names in literalsNoNoYesYes User-defined literalsNoNoNoYes Standard-layout and trivial typesNoYesYesYes Defaulted and deleted functionsNoNoYesYes Extended friend declarationsYesYesNoYes Extended sizeofNoNoNoYes Inline namespacesNoNoYesYes Unrestricted unionsNoNoYesYes Local and unnamed types as template argumentsYesYesYesYes Range-based for-loopNoYesYesYesBoost.Foreachoverride and finalNoYesNoYes#defineMinimal GC supportYesYesNoNo noexceptNoNoYesYesC++11 Core Language Features: Concurrency
VC 10VC 11GCC 4.6GCC 4.7替代方案Reworded sequence pointsNoNoNoNo AtomicsNoYesNoYesBoost.AtomicStrong compare and exchangeNoYesNoNo Bidirectional fencesNoYesNoNo Memory modelNoNoNoNo Data-dependency orderingNoYesNoNo Data-dependency ordering: function annotationNoNoNoNo exception_ptrYesYesYesYesBoost.Exceptionquick_exit and at_quick_exitNoNoNoNo Atomics in signal handlersNoNoNoNo Thread-local storageNoNoNoNoBoost.ThreadMagic staticsNoNoNoNoC++11 Core Language Features: C99
VC 10VC 11GCC 4.6GCC 4.7替代方案__func__NoNoYesYes__FUNCTION__C99 preprocessorNoNoYesYes long longYesYesYesYes__int64Extended integer typesNoNoNoNoC++11 Library
VC 10VC 11GCC 4.6GCC 4.7替代方案shared_ptr, weak_ptrYesYesYesYesBoost.SmartPtrmake_/allocate_shared, owner_beforeYesYesYesYesBoost.SmartPtrunique_ptrYesYesYesYesBoost.InterprocessFixed-Size ArraysYesYesYesYesBoost.ArraysHash TablesYesYesYesYesBoost.UnorderedSingly-linked listYesYesYesYesBoost.ContainerRegular ExpressionsYesYesYesYesBoost.RegexTupleYesYesYesYesBoost.TupleRandom Numbers & DistributionsYesYesYesYesBoost.RandomType TraitsYesYesYesYesBoost.TypeTraitsGeneralized Function PointersYesYesYesYesBoost.FunctionGeneralized BindersYesYesYesYesBoost.BindGeneralized Member Function AdaptersYesYesYesYesBoost.BindReference WrappersYesYesYesYesBoost.RefReturn type calculationYesYesYesYesBoost.ReturnTypeNew algorithmsYesYesYesYesBoost.AlgorithmTimeNoNoYesYesBoost.Chrono其中,斜体的Yes表示VC 11和GCC 4.7都支持,同时还有非C++11的替代方案,所以很可能在下一版本的KlayGE中使用到。从上面的表可以看出,Library的支持度相当好。即使编译器不支持,也可以很容易地用Boost替换掉。语言核心则还远不到完美,但最常用的基本都已经涵盖了。有些feature,比如foreach和auto,用Boost在库级别支持,对编译速度有很大影响。换用C++11在核心语言级别支持的话应该有较大幅度的编译性能提升。
KlayGE游戏引擎
- 各编译器对C++11的支持比较
- 各编译器对C++11的支持比较
- 主流编译器对C++11的支持现状比较
- 更多编译器对C++11的支持比较
- 各编译器对C++11的支持情况对比
- 各编译器对C99的支持
- 各C/C++编译器对wchar_t字符和字符串的正确支持程度
- 各C/C++编译器对wchar_t字符和字符串的正确支持程度
- 各C/C++编译器对wchar_t字符和字符串的正确支持程度
- 微软编译器增加了对C++11的支持
- 编译器对语言特性的支持
- gcc 编译器对 inline 函数的支持
- Visual Studio2013的C语言编译器对C99标准的支持情况
- C/C++ 标准以及各种编译器对标准的支持情况(不断完善中)
- [C++] 编译器支持的内建函数
- CMM编译器和C编译器过程调用实现的比较
- 第六篇 Java编译器与C/C++编译器的比较
- C的编译器对内存空间的划分
- 根据时间提取介于某个时间段的信息
- mp4 avc格式_sps_pps
- annotation(@Retention)
- 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)的比较
- 完善细节,使你的网站清新脱俗!
- 各编译器对C++11的支持比较
- 禁用UIButton的方法
- malloc/free与new/delete的区别
- js中escape()函数和unescape()函数的功能
- 活着,就是一口气。现在努力,是为了将来更好的生活。
- IOS面经系列(五)重温多态性
- 何凯明图像去雾--包含soft matting的matlab代码
- 对于lpad与level的理解
- C# 文件操作