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

來源:互聯網
上載者:User
文章目錄
  • C++11 Core Language Features
  • C++11 Core Language Features: Concurrency
  • C++11 Library
轉載請註明出處為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在核心語言層級支援的話應該有較大幅度的編譯效能提升。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.