Difference between revisions of "使用到的C++11特性"
From KlayGE
Gongminmin (Talk | contribs) m |
Gongminmin (Talk | contribs) |
||
(28 intermediate revisions by one user not shown) | |||
Line 1: | Line 1: | ||
− | 从[[KlayGE]] 4.2开始,一些C++ | + | 从[[KlayGE]] 4.2开始,一些C++11特性被引入代码中,部分替代了原先[[使用到的boost库|使用boost实现的功能]]。根据编译器和版本的不同,[[KFL]]会定义一些宏,来判断一个功能是否可用。这些宏都定义在KFL/Config.hpp中。 |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | 标记为''斜体''的宏已经从代码中删除,因为所有支持的编译器都已经包含那些特性。 | |
− | == C++ | + | == C++11核心语言功能 == |
− | + | ||
− | == C++ | + | {| class="wikitable" |
− | + | |- | |
− | + | ! 语言功能 !! 宏 !! MSVC !! GCC !! Clang !! 替代方案 | |
− | + | |- | |
− | + | | Allowing move constructors to throw [noexcept] || KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT || {{Yes}}14.0 || {{Yes}}4.6 || {{Yes}}3.0 || throw() | |
− | + | |- | |
− | + | | auto-typed variables, Multi-declarator auto, Declared type of an expression || ''KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}2.9 || Boost.Typeof | |
− | + | |- | |
+ | | Extern templates || ''KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT'' || {{Yes}}9.0 || {{Yes}}4.3 || {{Yes}}2.9 || | ||
+ | |- | ||
+ | | Explicit virtual overrides || ''KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.7 || {{Yes}}3.0 || #define | ||
+ | |- | ||
+ | | Generalized constant expressions || KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT || {{Yes}}14.0 || {{Yes}}4.6 || {{Yes}}3.1 || | ||
+ | |- | ||
+ | | Null pointer constant || ''KLAYGE_CXX11_CORE_NULLPTR_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.6 || {{Yes}}3.0 || 自己实现的nullptr | ||
+ | |- | ||
+ | | Range-based for || ''KLAYGE_CXX11_CORE_FOREACH_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.6 || {{Yes}}3.0 || Boost.Foreach | ||
+ | |- | ||
+ | | Rvalue references || ''KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}2.9 || Boost.Move | ||
+ | |- | ||
+ | | Static assertions || ''KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}2.9 || Boost.StaticAssert | ||
+ | |- | ||
+ | | Strongly-typed enums || ''KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.4 || {{Yes}}2.9 || C++98 enum | ||
+ | |- | ||
+ | | Variadic templates || ''KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES'' || {{Yes}}12.0 || {{Yes}}4.3 || {{Yes}}2.9 || | ||
+ | |} | ||
+ | |||
+ | == C++11核心语言功能:并行 == | ||
+ | |||
+ | == C++11核心语言功能:C99 == | ||
+ | |||
+ | == C++11库 == | ||
+ | |||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! 名称 !! 宏 !! MSVC !! GCC !! Clang !! 替代方案 | ||
+ | |- | ||
+ | | algorithm (只用了copy_if) || ''KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.3 || {{Yes}}3.0 || 自己实现的copy_if | ||
+ | |- | ||
+ | | array || ''KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Array | ||
+ | |- | ||
+ | | atomic || ''KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.4 || {{Yes}}3.0 || Boost.Atomic | ||
+ | |- | ||
+ | | chrono || ''KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.4 (必须有_GLIBCXX_HAS_GTHREADS) || {{Yes}}3.0 || Boost.Chrono | ||
+ | |- | ||
+ | | cstdint || ''KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Integer | ||
+ | |- | ||
+ | | emplace || ''KLAYGE_CXX11_LIBRARY_EMPLACE_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.8 || {{Yes}}3.0 || | ||
+ | |- | ||
+ | | functional || ''KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Functional | ||
+ | |- | ||
+ | | mem_fn || ''KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT'' || {{Yes}}12.0 || {{Yes}}4.8 || {{Yes}}3.4 || Boost.MemFn | ||
+ | |- | ||
+ | | random || ''KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Random | ||
+ | |- | ||
+ | | regex || ''KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.9 || {{Yes}}3.0 || Boost.Regex | ||
+ | |- | ||
+ | | smart_ptr || ''KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.SmartPtr | ||
+ | |- | ||
+ | | system_error || ''KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.4 || {{Yes}}3.0 || Boost.System | ||
+ | |- | ||
+ | | thread || ''KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT'' || {{Yes}}11.0 || {{Yes}}4.4 (必须有_GLIBCXX_HAS_GTHREADS) || {{Yes}}3.0 || Boost.Thread | ||
+ | |- | ||
+ | | tuple || ''KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Tuple | ||
+ | |- | ||
+ | | type_traits || ''KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.TypeTraits | ||
+ | |- | ||
+ | | unordered || ''KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT'' || {{Yes}}10.0 || {{Yes}}4.3 || {{Yes}}3.0 || Boost.Unordered | ||
+ | |} | ||
+ | |||
+ | == TS == | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! 名称 !! 宏 !! MSVC !! GCC !! Clang !! 替代方案 | ||
+ | |- | ||
+ | | filesystem || KLAYGE_TS_LIBRARY_FILESYSTEM_V2_SUPPORT || {{Yes}}11.0 || {{No}}No || {{No}}No || Boost.FileSystem | ||
+ | |- | ||
+ | | filesystem || KLAYGE_TS_LIBRARY_FILESYSTEM_V3_SUPPORT || {{Yes}}14.0 || {{No}}No || {{No}}No || Boost.FileSystem | ||
+ | |- | ||
+ | | optional || KLAYGE_TS_LIBRARY_OPTIONAL_SUPPORT || {{No}}No || {{Yes}}4.9 || {{No}}No || Boost.Optional | ||
+ | |- | ||
+ | | any || KLAYGE_TS_LIBRARY_ANY_SUPPORT || {{No}}No || {{Yes}}5.1 || {{No}}No || Boost.Any | ||
+ | |} | ||
+ | |||
+ | == 相关内容 == | ||
+ | [[多种编译器对C++11的支持]] | ||
+ | |||
+ | [[使用到的boost库]] | ||
+ | |||
+ | [[en: Used C++11 features]] |
Latest revision as of 02:35, 2 January 2017
从KlayGE 4.2开始,一些C++11特性被引入代码中,部分替代了原先使用boost实现的功能。根据编译器和版本的不同,KFL会定义一些宏,来判断一个功能是否可用。这些宏都定义在KFL/Config.hpp中。
标记为斜体的宏已经从代码中删除,因为所有支持的编译器都已经包含那些特性。
C++11核心语言功能
语言功能 | 宏 | MSVC | GCC | Clang | 替代方案 |
---|---|---|---|---|---|
Allowing move constructors to throw [noexcept] | KLAYGE_CXX11_CORE_NOEXCEPT_SUPPORT | 14.0 | 4.6 | 3.0 | throw() |
auto-typed variables, Multi-declarator auto, Declared type of an expression | KLAYGE_CXX11_CORE_DECLTYPE_SUPPORT | 10.0 | 4.3 | 2.9 | Boost.Typeof |
Extern templates | KLAYGE_CXX11_CORE_EXTERN_TEMPLATES_SUPPORT | 9.0 | 4.3 | 2.9 | |
Explicit virtual overrides | KLAYGE_CXX11_CORE_OVERRIDE_SUPPORT | 11.0 | 4.7 | 3.0 | #define |
Generalized constant expressions | KLAYGE_CXX11_CORE_CONSTEXPR_SUPPORT | 14.0 | 4.6 | 3.1 | |
Null pointer constant | KLAYGE_CXX11_CORE_NULLPTR_SUPPORT | 10.0 | 4.6 | 3.0 | 自己实现的nullptr |
Range-based for | KLAYGE_CXX11_CORE_FOREACH_SUPPORT | 11.0 | 4.6 | 3.0 | Boost.Foreach |
Rvalue references | KLAYGE_CXX11_CORE_RVALUE_REFERENCES_SUPPORT | 10.0 | 4.3 | 2.9 | Boost.Move |
Static assertions | KLAYGE_CXX11_CORE_STATIC_ASSERT_SUPPORT | 10.0 | 4.3 | 2.9 | Boost.StaticAssert |
Strongly-typed enums | KLAYGE_CXX11_CORE_STRONGLY_TYPED_ENUMS_SUPPORT | 11.0 | 4.4 | 2.9 | C++98 enum |
Variadic templates | KLAYGE_CXX11_CORE_VARIADIC_TEMPLATES | 12.0 | 4.3 | 2.9 |
C++11核心语言功能:并行
C++11核心语言功能:C99
C++11库
名称 | 宏 | MSVC | GCC | Clang | 替代方案 |
---|---|---|---|---|---|
algorithm (只用了copy_if) | KLAYGE_CXX11_LIBRARY_ALGORITHM_SUPPORT | 11.0 | 4.3 | 3.0 | 自己实现的copy_if |
array | KLAYGE_CXX11_LIBRARY_ARRAY_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Array |
atomic | KLAYGE_CXX11_LIBRARY_ATOMIC_SUPPORT | 11.0 | 4.4 | 3.0 | Boost.Atomic |
chrono | KLAYGE_CXX11_LIBRARY_CHRONO_SUPPORT | 11.0 | 4.4 (必须有_GLIBCXX_HAS_GTHREADS) | 3.0 | Boost.Chrono |
cstdint | KLAYGE_CXX11_LIBRARY_CSTDINT_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Integer |
emplace | KLAYGE_CXX11_LIBRARY_EMPLACE_SUPPORT | 10.0 | 4.8 | 3.0 | |
functional | KLAYGE_CXX11_LIBRARY_FUNCTIONAL_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Functional |
mem_fn | KLAYGE_CXX11_LIBRARY_MEM_FN_SUPPORT | 12.0 | 4.8 | 3.4 | Boost.MemFn |
random | KLAYGE_CXX11_LIBRARY_RANDOM_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Random |
regex | KLAYGE_CXX11_LIBRARY_REGEX_SUPPORT | 10.0 | 4.9 | 3.0 | Boost.Regex |
smart_ptr | KLAYGE_CXX11_LIBRARY_SMART_PTR_SUPPORT | 11.0 | 4.3 | 3.0 | Boost.SmartPtr |
system_error | KLAYGE_CXX11_LIBRARY_SYSTEM_ERROR_SUPPORT | 10.0 | 4.4 | 3.0 | Boost.System |
thread | KLAYGE_CXX11_LIBRARY_THREAD_SUPPORT | 11.0 | 4.4 (必须有_GLIBCXX_HAS_GTHREADS) | 3.0 | Boost.Thread |
tuple | KLAYGE_CXX11_LIBRARY_TUPLE_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Tuple |
type_traits | KLAYGE_CXX11_LIBRARY_TYPE_TRAITS_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.TypeTraits |
unordered | KLAYGE_CXX11_LIBRARY_UNORDERED_SUPPORT | 10.0 | 4.3 | 3.0 | Boost.Unordered |
TS
名称 | 宏 | MSVC | GCC | Clang | 替代方案 |
---|---|---|---|---|---|
filesystem | KLAYGE_TS_LIBRARY_FILESYSTEM_V2_SUPPORT | 11.0 | No | No | Boost.FileSystem |
filesystem | KLAYGE_TS_LIBRARY_FILESYSTEM_V3_SUPPORT | 14.0 | No | No | Boost.FileSystem |
optional | KLAYGE_TS_LIBRARY_OPTIONAL_SUPPORT | No | 4.9 | No | Boost.Optional |
any | KLAYGE_TS_LIBRARY_ANY_SUPPORT | No | 5.1 | No | Boost.Any |