move-semantics相关内容

自动生成移动操作的规则是什么?

在C ++ 98中,C ++编译器可以通过成员自动拷贝自动生成拷贝构造函数和拷贝赋值运算符,例如 struct X { std :: string s; std :: vector v; int n; }; 编译器自动为 但是,如何在C ++ 11中使用移动语义来改变? 是移动 构造函数和 移动 / strong>自动生成 ..
发布时间:2016-10-13 10:08:08 C/C++开发

移动向量始终为空?

N3485 17.6.5.15 [lib.types.movedfrom] / 1: 在C ++标准库中定义的类型对象可以从(12.8)移动。可以显式指定或隐式生成移动操作 。除非另有说明,否则此类移动对象应置于有效但未指定的状态。 code> vector 明确将其从此段落中排除。然而,我不能想出一个正确的实现,将导致向量不为空。 有一些标准,这意味着我失踪或是类似于处理 b ..
发布时间:2016-10-13 09:52:11 C/C++开发

为什么我们复制然后移动?

我在某处看到代码,其中某人决定复制对象,然后将其移动到类的数据成员。这让我困惑,因为我认为移动的整个要点是避免复制。下面是示例: struct S { S(std :: string str):data (std :: move(str)) {} }; 以下是我的问题: 为什么我们不是对 str 进行右值引用? ,特别是给予 std :: ..
发布时间:2016-10-11 23:24:25 C/C++开发

为什么你使用std :: move当你有&&在C ++ 11?

可能重复: 我最近参加了一个C ++ 11研讨会,并给出了以下建议。 &&&并且你不确定,你几乎总是使用std :: move 您应该使用 std :: move 而不是某些替代方案,以及在您不应使用 std :: move ? 解决方案 首先,我会解决的问题可能有一个误解: 每当你看到 T&& t 在代码中(And T是一个实际类型,而不是模板类型) ..
发布时间:2016-10-11 22:53:13 C/C++开发

我可以通常/总是使用std :: forward而不是std :: move?

我一直在看Scott Meyers的在C ++和Beyond 2012会议上讨论通用引用,到目前为止,一切都有意义。然而,观众成员在大约50分钟时问一个问题,我也想知道。 Meyers说他不关心答案,因为它是非惯用的,会愚蠢他的心,但我仍然感兴趣。 代码如下: //重载的典型函数体: void doWork(const Widget& param)// copy { // o ..

什么构成了“从其移动”的有效状态,对象在C ++ 11?

我一直在试图围绕C ++ 11中的移动语义如何工作,而且我很难理解移动对象需要满足的条件。查看这里的答案不能真正解决我的问题,因为不能看到如何以明智的方式将它应用于pimpl对象,尽管移动语义是完美的pimpls 。 我的问题的最简单的例子涉及pimpl成语,如下: class Foo { std :: unique_ptr impl_; public: ..
发布时间:2016-10-11 22:40:29 C/C++开发

是否有任何情况下,RValue参考(&&)的返回是有用的?

当函数应返回RValue参考时,是否有原因?一种技术或诀窍,或成语或模式? MyClass&& func(...); 我知道一般返回引用,但有时我们这样做,不是我们( T& T :: operator = (T)只是一个惯用的例子)。但是 T&& func(...)?有没有什么一般的地方,我们会从中获益? 解决方案 有一些情况下,当适当的时候,但它们相对较少。当 ..
发布时间:2016-10-11 22:10:21 C/C++开发