相关疑难解决方法(0)

移动物体怎么办?

标准是否准确定义了对象移动后我可以对其做什么?我曾经认为你用移动物体做的所有事情都可以破坏它,但这还不够.

例如,采用swap标准库中定义的函数模板:

template <typename T>
void swap(T& a, T& b)
{
    T c = std::move(a); // line 1
    a = std::move(b);   // line 2: assignment to moved-from object!
    b = std::move(c);   // line 3: assignment to moved-from object!
}
Run Code Online (Sandbox Code Playgroud)

显然,必须可以分配给移动的对象,否则第2行和第3行将失败.那么移动对象我还能做些什么呢?我在哪里可以找到标准中的这些细节?

(顺便说一句,为什么它T c = std::move(a);不是T c(std::move(a));第1行呢?)

c++ swap variable-assignment move-semantics c++11

136
推荐指数
2
解决办法
1万
查看次数

移动的向量是否总是空的?

我知道通常标准对已经移动的值的要求很少:

N3485 17.6.5.15 [lib.types.movedfrom]/1:

可以从(12.8)移动C++标准库中定义的类型的对象.可以显式指定或隐式生成移动操作.除非另有规定,否则此类移动物体应置于有效但未指定的状态.

我找不到任何与vector此明确排除的内容.但是,我无法想出一个理智的实现,导致向量不为空.

是否有一些标准需要我缺少或者类似于在C++ 03中作为连续缓冲区处理basic_string

c++ vector language-lawyer move-semantics c++11

36
推荐指数
2
解决办法
6697
查看次数