标准是否保证了移动语义



我想我大体上理解了移动语义的要点,但我想知道C++标准是否真的保证了像std::vector这样的std类型的移动语义。例如,以下代码段是否保证生成check = true(如果使用的编译器/std-lib符合标准(?

std::vector<int> myVec;
int *myPtr = myVec.data();
std::vector<int> otherVec = std::move(myVec);
int *otherPtr = otherVec.data();
bool check = myPtr == otherPtr;

换句话说:当移动std::vector时,标准是否保证我实际上会执行移动而不是复制(例如,因为使用的std-lib没有实现std::vector的移动构造函数(?

我相信这是通过[tab.contacter.alloc.req]的以下要求为分配器感知容器保证的:

X(rv)X u(rv);后置条件:u具有与rv在此构造之前相同的元素;。。。

注意单词">相同元素";,而不是">具有相同内容的元素";。例如,在之后

std::vector<int> otherVec = std::move(myVec);

因此CCD_ 9的第一个元素必须是与该移动构造之前的CCD_。

最新更新