10. utilities (工具组件)
包含各种通用的工具组件。头文件: <utility>, <tuple>, <functional>, <memory>。
10.1 utility
template <class T> T&& forward(typename remove_reference<T>::type& t) noexcept
完美转发。
- 输入:
t - 输出:
T&& - 注意: 必须显式指定模板参数
template <class T> typename remove_reference<T>::type&& move(T&&) noexcept
强制转右值引用。
- 输入: 任何值
- 输出: 右值引用
- 注意: 不移动数据,仅转换值类别
template <class T> void swap(T& a, T& b)
交换。
- 输入:
a,b - 输出:
void
template <class T, class U=T> constexpr T exchange(T& obj, U&& new_value)
替换并返回旧值。
- 输入:
obj,new_value - 输出: 旧值
- 注意: C++14
10.2 pair
template <class T1, class T2> struct pair
二元组。
- 输入:
T1,T2 - 输出: pair 对象
pair<V1, V2> make_pair(T1&& x, T2&& y)
创建 pair。
- 输入:
x,y - 输出: pair 对象
- 注意: 使用 decay 类型推导
10.3 tuple
template <class... Types> class tuple
元组。
- 输入:
Types... - 输出: tuple 对象
template <class... Types> tuple<Types...> make_tuple(Types&&... args)
创建 tuple。
- 输入:
args... - 输出: tuple 对象
template <class... Types> tuple<Types&...> tie(Types&... args) noexcept
创建引用 tuple。
- 输入: 左值引用
- 输出: 引用 tuple
template <class... Tuples> auto tuple_cat(Tuples&&... tpls)
连接 tuple。
- 输入: tuple 参数包
- 输出: 合并后的 tuple
10.7 functional
template <class T> class reference_wrapper
可复制引用的包装器。
- 输入:
T - 输出: 包装器对象
template <class T=void> struct plus / minus / multiplies / divides / modulus / negate
算术函数对象。
- 输入: 两个 T
- 输出: 运算结果
template <class T=void> struct equal_to / not_equal_to / greater / less / greater_equal / less_equal
比较函数对象。
- 输入: 两个 T
- 输出:
bool
template <class Fn, class... BoundArgs> constexpr auto bind(Fn&& fn, BoundArgs&&... args)
绑定函数参数。
- 输入:
fn,args... - 输出: 绑定后的可调用对象
template <class R, class... ArgTypes> class function<R(ArgTypes...)>
类型擦除函数包装器。
- 输入: 签名
R(Args...) - 输出: function 对象
explicit operator bool() const noexcept
检查是否非空。
- 输入: 无
- 输出:
bool
class bad_function_call : public exception
空 function 调用异常。
- 输入: 无
- 输出: 异常对象
template <class T> struct hash
哈希函数对象。
- 输入:
T - 输出:
size_t
10.8 memory
template <class T, class D = default_delete<T>> class unique_ptr
独占所有权智能指针。
- 输入:
T,D - 输出: unique_ptr 对象
- 注意: 不可复制,只可移动
pointer release() noexcept
释放所有权。
- 输入: 无
- 输出:
pointer - 注意: 不删除对象
void reset(pointer p = pointer()) noexcept
重置。
- 输入:
p - 输出:
void
template <class T, class... Args> unique_ptr<T> make_unique(Args&&... args)
创建 unique_ptr。
- 输入:
args... - 输出:
unique_ptr<T> - 注意: C++14
注意:
shared_ptr/weak_ptr/make_shared在本交付配置下不可链接一致性测试结果:
-frtti(clang 默认开关)下,任何使用std::shared_ptr/std::weak_ptr/std::make_shared的程序 链接失败 ——kf32ld: error: undefined symbol: typeinfo for std::__1::__shared_weak_count(最小复现可复现)。 交付库中未提供该 typeinfo 符号。详见 13.7.1 L1。使用限制:本交付配置下不要使用
shared_ptr/weak_ptr/make_shared; 独占所有权请改用unique_ptr(正常可用)。以下用法说明仅供了解接口,不代表当前可链接。
template <class T> class shared_ptr
共享所有权引用计数智能指针。
- 输入:
T - 输出: shared_ptr 对象
long use_count() const noexcept
获取引用计数。
- 输入: 无
- 输出:
long
template <class T, class... Args> shared_ptr<T> make_shared(Args&&... args)
创建 shared_ptr。
- 输入:
args... - 输出:
shared_ptr<T>
template <class T> class weak_ptr
弱引用指针。
- 输入:
T - 输出: weak_ptr 对象
shared_ptr<T> lock() const noexcept
提升为 shared_ptr。
- 输入: 无
- 输出:
shared_ptr<T>
template <class T> class enable_shared_from_this
允许对象安全获取自身 shared_ptr。
- 输入:
T - 输出: 基类
template <class T> T* addressof(T& r) noexcept
获取真实地址。
- 输入:
r - 输出:
T*
template <class InputIterator, class ForwardIterator> ForwardIterator uninitialized_copy(...)
复制到未初始化内存。
- 输入: 源范围,目标
- 输出:
ForwardIterator