Difference between revisions of "使用到的C++11特性"

From KlayGE
Jump to: navigation, search
m
Line 8: Line 8:
 
* Strongly-typed enums
 
* Strongly-typed enums
 
* Range-based for
 
* Range-based for
 +
* Rvalue references
  
 
== C++11核心语言功能:并行 ==
 
== C++11核心语言功能:并行 ==
Line 26: Line 27:
 
* Type Traits
 
* Type Traits
 
* Unordered
 
* Unordered
 +
 +
== 各编译器启用的功能对比 ==
 +
根据编译器和版本的不同,[[KlayGE]]会定义一些宏,来判断一个功能是否可用。这些宏定义在KFL/Config.hpp中。
 +
 +
=== C++11核心语言功能 ===
 +
{| class="wikitable"
 +
|-
 +
! 语言功能 !! 宏 !! MSVC !! GCC !! 替代方案
 +
|-
 +
| Static assertions || KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT || '''10.0''' || '''4.3''' || Boost.StaticAssert
 +
|-
 +
| Declared type of an expression || KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT || '''10.0''' || '''4.3''' || Boost.Typeof
 +
|-
 +
| Rvalue references || KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT || '''11.0''' || '''4.3''' || Boost.Move
 +
|-
 +
| Extern templates || KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT || '''9.0''' || '''4.3''' ||
 +
|-
 +
| Variadic templates || KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES || '''12.0''' || '''4.3''' ||
 +
|-
 +
| Strongly-typed enums || KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT || '''11.0''' || '''4.4''' || C++98的enum
 +
|-
 +
| Null pointer constant || KLAYGE_CXX11_CORE_NULLPTR_SUPPORT || '''10.0''' || '''4.6''' || 自己实现的null_ptr
 +
|-
 +
| Range-based for || KLAYGE_CXX11_CORE_FOREACH_SUPPORT || '''11.0''' || '''4.6''' || Boost.Foreach
 +
|-
 +
| Allowing move constructors to throw [noexcept] || KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT || No || '''4.6''' ||
 +
|-
 +
| Generalized constant expressions || KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT || No || '''4.6''' ||
 +
|-
 +
| Explicit virtual overrides || KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT || '''11.0''' || '''4.7''' || #define
 +
|}
 +
 +
=== C++11库 ===
 +
{| class="wikitable"
 +
|-
 +
! 名称 !! 宏 !! MSVC !! GCC !! 替代方案
 +
|-
 +
| algorithm(只有用了copy_if) || KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT || '''11.0''' || '''4.3''' || 自己实现的copy_if
 +
|-
 +
| array || KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT || '''10.0''' || '''4.3''' || Boost.Array
 +
|-
 +
| cstdint || KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT || '''10.0''' || '''4.3''' || Boost.Integer
 +
|-
 +
| functional || KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT || '''10.0''' || '''4.3''' || Boost.Functional
 +
|-
 +
| mem_fn || KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT || '''12.0''' || No || Boost.MemFn
 +
|-
 +
| random || KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT || '''10.0''' || '''4.3''' || Boost.Random
 +
|-
 +
| regex || KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT || '''10.0''' || '''4.3''' || Boost.Regex
 +
|-
 +
| smart_ptr || KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT || '''11.0''' || '''4.3''' || Boost.SmartPtr
 +
|-
 +
| tuple || KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT || '''10.0''' || '''4.3''' || Boost.Tuple
 +
|-
 +
| type_traits || KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT || '''10.0''' || '''4.3''' || Boost.TypeTraits
 +
|-
 +
| unordered || KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT || '''10.0''' || '''4.3''' || Boost.Unordered
 +
|-
 +
| atomic || KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT || '''11.0''' || '''4.4''' || Boost.Atomic
 +
|-
 +
| system || KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT || '''10.0''' || '''4.4''' || Boost.System
 +
|-
 +
| chrono || KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT || '''11.0''' || '''4.4'''(必须有_GLIBCXX_HAS_GTHREADS) || Boost.Chrono
 +
|-
 +
| thread || KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT || '''11.0''' || '''4.4'''(必须有_GLIBCXX_HAS_GTHREADS) || Boost.Thread
 +
|}
 +
 +
=== TR2 ===
 +
{| class="wikitable"
 +
|-
 +
! 名称 !! 宏 !! MSVC !! GCC !! 替代方案
 +
|-
 +
| filesystem || KLAYGE_TR2_LIBRARY_FILESYSTEM_V2_SUPPORT || '''11.0''' || No || Boost.FileSystem
 +
|}
  
 
== 相关内容 ==
 
== 相关内容 ==

Revision as of 03:01, 24 April 2014

KlayGE 4.2开始,一些C++11特性被引入代码中,部分替代了原先使用boost实现的功能。包括:

C++11核心语言功能

  • Static assertions
  • auto-typed variables
  • Declared type of an expression
  • Null pointer constant
  • Strongly-typed enums
  • Range-based for
  • Rvalue references

C++11核心语言功能:并行

C++11核心语言功能:C99

  • long long

C++11库

  • Array
  • Chrono
  • Functional
  • Integer
  • Random
  • Regex
  • System
  • Thread
  • Tuple
  • Type Traits
  • Unordered

各编译器启用的功能对比

根据编译器和版本的不同,KlayGE会定义一些宏,来判断一个功能是否可用。这些宏定义在KFL/Config.hpp中。

C++11核心语言功能

语言功能 MSVC GCC 替代方案
Static assertions KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT 10.0 4.3 Boost.StaticAssert
Declared type of an expression KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT 10.0 4.3 Boost.Typeof
Rvalue references KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT 11.0 4.3 Boost.Move
Extern templates KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT 9.0 4.3
Variadic templates KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES 12.0 4.3
Strongly-typed enums KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT 11.0 4.4 C++98的enum
Null pointer constant KLAYGE_CXX11_CORE_NULLPTR_SUPPORT 10.0 4.6 自己实现的null_ptr
Range-based for KLAYGE_CXX11_CORE_FOREACH_SUPPORT 11.0 4.6 Boost.Foreach
Allowing move constructors to throw [noexcept] KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT No 4.6
Generalized constant expressions KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT No 4.6
Explicit virtual overrides KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT 11.0 4.7 #define

C++11库

名称 MSVC GCC 替代方案
algorithm(只有用了copy_if) KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT 11.0 4.3 自己实现的copy_if
array KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT 10.0 4.3 Boost.Array
cstdint KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT 10.0 4.3 Boost.Integer
functional KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT 10.0 4.3 Boost.Functional
mem_fn KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT 12.0 No Boost.MemFn
random KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT 10.0 4.3 Boost.Random
regex KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT 10.0 4.3 Boost.Regex
smart_ptr KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT 11.0 4.3 Boost.SmartPtr
tuple KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT 10.0 4.3 Boost.Tuple
type_traits KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT 10.0 4.3 Boost.TypeTraits
unordered KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT 10.0 4.3 Boost.Unordered
atomic KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT 11.0 4.4 Boost.Atomic
system KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT 10.0 4.4 Boost.System
chrono KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT 11.0 4.4(必须有_GLIBCXX_HAS_GTHREADS) Boost.Chrono
thread KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT 11.0 4.4(必须有_GLIBCXX_HAS_GTHREADS) Boost.Thread

TR2

名称 MSVC GCC 替代方案
filesystem KLAYGE_TR2_LIBRARY_FILESYSTEM_V2_SUPPORT 11.0 No Boost.FileSystem

相关内容

多种编译器对C++11的支持