C++ 具名要求: MoveInsertable (C++11 起)

来自cppreference.com
< cpp‎ | named req
 
 
 

指定该类型的对象能以给定的分配器,从一个该类型的右值构造到未初始化存储之中。

[编辑] 要求

以下情况下,类型 T 可移动构造 (MoveInsertable) 进容器 X(其 value_type 等同于 T):给定

A 分配器类型
m A 类型的左值
p 容器所准备的 T* 类型的指针
rv T 类型的右值表达式

其中 X::allocator_type 等同于 std::allocator_traits<A>::rebind_alloc<T>

下列表达式为良式:

std::allocator_traits<A>::construct(m, p, rv);

并且求值后,*p 的值等价于 rv 先前保有的值(rv 保持有效,但处于未指明的状态)。

X 不具分配器,则如同 A 就是 std::allocator<T> 一样进行定义,但并不需要创建分配器对象,且不会实例化用户定义的 std::allocator 的特化。

[编辑] 注解

Astd::allocator<T>,则这将调用布置 new,如 ::new((void*)p) T(rv)

若使用了 std::allocator<T> 或类似的分配器,则该类不必为满足此类型要求而实现移动构造函数:接收 const T& 实参的复制构造函数能绑定右值表达式。若可移动插入 (MoveInsertable) 的类实现了移动构造函数,则它可能亦实现移动语义以利用“构造后 rv 的值未指明”的事实。

[编辑] 参阅

可复制插入 (CopyInsertable)