Difference between revisions of "使用到的C++11特性"
From KlayGE
Gongminmin (Talk | contribs) m |
Gongminmin (Talk | contribs) |
||
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实现的功能。包括:
Contents
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 |