各編譯器對C++11的支持比較


轉載請注明出處為KlayGE游戲引擎,本文的永久鏈接為http://www.klayge.org/?p=2154

KlayGE首次引入C++11特性之后,我順便調研了一下個主流編譯器對C++11的支持度,以便在下個版本中加入更多的C++11元素。這里還列出了在不支持的時候,可以采用的替代方案。主要參考了C++11 Features in Visual C++ 11Status of Experimental C++0x Support in GCC 4.6Status of Experimental C++0x Support in GCC 4.7Boost

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在核心語言級別支持的話應該有較大幅度的編譯性能提升。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM