MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
参数转发函数

参数转发函数实现 更多...

函数

template<typename T>
MSTL_NODISCARD constexpr T && forward (remove_reference_t< T > &x) noexcept
 完美转发左值
template<typename T>
MSTL_NODISCARD constexpr T && forward (remove_reference_t< T > &&x) noexcept
 完美转发右值
template<typename T>
MSTL_NODISCARD constexpr remove_reference_t< T > && move (T &&x) noexcept
 无条件转换为右值引用
template<typename T>
MSTL_NODISCARD constexpr conditional_t<!is_nothrow_move_constructible< T >::value &&is_copy_constructible< T >::value, const T &, T && > move_if_noexcept (T &x) noexcept
 在安全的情况下执行移动操作
template<typename T>
MSTL_NODISCARD constexpr T * addressof (T &x) noexcept
 获取对象的地址
template<typename T>
const T * addressof (const T &&)=delete
 禁止获取const右值的地址

详细描述

参数转发函数实现

函数说明

◆ addressof() [1/2]

template<typename T>
const T * addressof ( const T && )
delete

禁止获取const右值的地址

模板参数
T对象类型
注解
删除const右值重载以防止悬垂引用

◆ addressof() [2/2]

template<typename T>
MSTL_NODISCARD constexpr T * addressof ( T & x)
constexprnoexcept

获取对象的地址

模板参数
T对象类型
参数
x对象引用
返回
对象的指针

可避免重载的operator&干扰

在文件 type_traits.hpp3103 行定义.

被这些函数引用 allocated_ptr< Alloc >::allocated_ptr(), atomic_exchange_any(), atomic_ref_base< T, false, false >::atomic_ref_base(), atomic_store_any(), atomic< int8_t >::compare_exchange_strong(), atomic< int8_t >::compare_exchange_strong(), atomic_base< T * >::compare_exchange_strong(), atomic_base< T * >::compare_exchange_strong(), atomic< int8_t >::compare_exchange_weak(), atomic< int8_t >::compare_exchange_weak(), atomic_base< T * >::compare_exchange_weak(), atomic_base< T * >::compare_exchange_weak(), optional< T & >::emplace(), atomic< int8_t >::exchange(), atomic< int8_t >::exchange(), atomic< int8_t >::load(), atomic< int8_t >::load(), exception::operator=(), exception::operator=(), lock< Mutex, true >::operator=(), optional< T >::operator=(), optional< T >::operator=(), optional< T >::operator=(), optional< T & >::operator=(), optional< T & >::operator=(), shared_lock< SharedMutex >::operator=(), shared_ptr< periodic_task_state >::operator=(), shared_ptr< periodic_task_state >::operator=(), variant< Types >::operator=(), variant< Types >::operator=(), weak_ptr< T >::operator=(), weak_ptr< T >::operator=(), pointer_traits< T * >::pointer_to(), reference_wrapper< T >::reference_wrapper(), atomic< int8_t >::store(), atomic< int8_t >::store(), optional< T >::swap(), shared_ptr< periodic_task_state >::swap(), variant< Types >::swap() , 以及 weak_ptr< T >::swap().

◆ forward() [1/2]

template<typename T>
MSTL_NODISCARD constexpr T && forward ( remove_reference_t< T > && x)
constexprnoexcept

完美转发右值

模板参数
T目标类型
参数
x要转发的右值
返回
转发后的引用
注解
如果T是左值引用类型,触发静态断言

用于实现完美转发,保持值的类别

在文件 type_traits.hpp3061 行定义.

引用了 integral_constant< bool, Value >< false >::value.

◆ forward() [2/2]

template<typename T>
MSTL_NODISCARD constexpr T && forward ( remove_reference_t< T > & x)
constexprnoexcept

完美转发左值

模板参数
T目标类型
参数
x要转发的左值
返回
转发后的引用

用于实现完美转发,保持值的类别

在文件 type_traits.hpp3047 行定义.

被这些函数引用 allocate_shared(), optional< T >::and_then(), optional< T >::and_then(), optional< T >::and_then(), optional< T >::and_then(), optional< T & >::and_then(), optional< T & >::and_then(), optional< T & >::and_then(), optional< T & >::and_then(), apply(), async(), async(), bind_front(), binder< Func(BoundArgs...)>::binder(), binder_front< decay_t< Func >, decay_t< Args >... >::binder_front(), bindrer< Res, Func(BoundArgs...)>::bindrer(), once_flag::call_once, call_wrapper< Types >::call_wrapper(), compressed_pair< IfEmpty, T, Compressed >::compressed_pair(), compressed_pair< IfEmpty, T, Compressed >::compressed_pair(), compressed_pair< IfEmpty, T, false >::compressed_pair(), compressed_pair< IfEmpty, T, false >::compressed_pair(), allocator_traits< rebind_alloc< T > >::construct(), construct(), optional< T >::emplace(), optional< T >::emplace(), variant< Types >::emplace(), variant< Types >::emplace(), exchange(), forward_as_tuple(), function< Res(Args...)>::function(), get(), get(), invoke(), invoke_r(), make_any(), make_any(), exception_ptr::make_exception_ptr, make_from_tuple(), make_optional(), make_optional(), make_optional(), make_pair(), packaged_task< Res(Args...)>::make_ready_at_thread_exit(), make_shared(), make_tuple(), make_unique(), MSTL_DEPRECATE_FOR(), MSTL_DEPRECATE_FOR(), binder< Func(BoundArgs...)>::operator()(), binder< Func(BoundArgs...)>::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), binder_front< decay_t< Func >, decay_t< Args >... >::operator()(), bindrer< Res, Func(BoundArgs...)>::operator()(), bindrer< Res, Func(BoundArgs...)>::operator()(), function< Res(Args...)>::operator()(), packaged_task< Res(Args...)>::operator()(), reference_wrapper< T >::operator()(), function< Res(Args...)>::operator=(), optional< T >::operator=(), pair< const Key, T >::operator=(), pair< const Key, T >::operator=(), tuple< This, Rest... >::operator=(), tuple< This, Rest... >::operator=(), tuple< This, Rest... >::operator=(), unique_ptr< env_value >::operator=(), unique_ptr< T[], Deleter >::operator=(), optional< T >::optional(), optional< T >::optional(), optional< T >::optional(), optional< T >::or_else(), optional< T >::or_else(), optional< T & >::or_else(), optional< T & >::or_else(), packaged_task< Res(Args...)>::packaged_task(), pair< const Key, T >::pair(), pair< const Key, T >::pair(), scoped_thread::scoped_thread(), promise< Res >::set_value(), promise< Res >::set_value_at_thread_exit(), shared_ptr< periodic_task_state >::shared_ptr(), stop_callback< Callback >::stop_callback(), stop_callback< Callback >::stop_callback(), thread::thread(), optional< T >::transform(), optional< T >::transform(), optional< T >::transform(), optional< T >::transform(), optional< T & >::transform(), optional< T & >::transform(), optional< T & >::transform(), optional< T & >::transform(), tuple< This, Rest... >::tuple(), tuple< This, Rest... >::tuple(), tuple_cat(), unique_ptr< env_value >::unique_ptr(), unique_ptr< T[], Deleter >::unique_ptr(), optional< T & >::value_or(), optional< T & >::value_or(), variant< Types >::variant(), variant< Types >::variant(), variant< Types >::variant(), variant< Types >::variant(), variant< Types >::visit() , 以及 variant< Types >::visit().

◆ move()

template<typename T>
MSTL_NODISCARD constexpr remove_reference_t< T > && move ( T && x)
constexprnoexcept

无条件转换为右值引用

模板参数
T参数类型
参数
x要转换的值
返回
转换后的右值引用

用于实现移动语义

在文件 type_traits.hpp3075 行定义.

被这些函数引用 move_if_noexcept().

◆ move_if_noexcept()

template<typename T>
MSTL_NODISCARD constexpr conditional_t<!is_nothrow_move_constructible< T >::value &&is_copy_constructible< T >::value, const T &, T && > move_if_noexcept ( T & x)
constexprnoexcept

在安全的情况下执行移动操作

模板参数
T参数类型
参数
x要移动的值
返回
如果可以安全移动则返回右值引用,否则返回const左值引用

如果类型不可无异常移动构造但可复制构造,则返回const引用以避免潜在异常

在文件 type_traits.hpp3090 行定义.

引用了 _MSTL , 以及 move().