来自en.cppreference.com的vector.emplace():
T(容器的元素类型)必须满足MoveAssignable,MoveInsertable和EmplaceConstructible的要求.
然而,emplace_back()不需要T为MoveAssignable.
我的问题是我有这样的项目 -
class Node
{
public:
...
const std::string mName;
const AABB mLocalAABB;
const Mat4 mLocalTransform;
}
Run Code Online (Sandbox Code Playgroud)
由于拥有const成员,因此不是MoveAssignable.
为什么emplace()不能像emplace_back()一样就地创建项目?
它可能是偏离主题但最终我想在emplace_back()上使用emplace()的原因是向量中的所有空间都已提前保留()并且我想要将项目从前到后放置.使用emplace_back()然后使用std :: reverse()不起作用,因为它还需要项目为MoveAssignable.
vector::emplace可以将项目放在向量中的任意位置.为了做到这一点,它需要将所有从插入点开始的对象移回1个空格,以便为新元素腾出空间.它使用移动赋值运算符移动它们,因此需要移动可分配.