问题标签 [move-semantics]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
927 浏览

c++ - 结合两个复制和移动的构造函数

目前,我的玩具类模板之一有两个看起来非常相似的构造函数:

我可以将它们组合成一个构造函数模板,还是会以某种方式改变语义?

0 投票
4 回答
5059 浏览

c++ - 在类中存储指针或对象?

只是一个设计/优化问题。你什么时候存储指针或对象,为什么?例如,我相信这两个工作(除非编译错误):

我相信在堆栈或堆上实例化时会有一个区别?

例如:

另外,sizeof(A)应该是 < sizeof(B)? 还有其他我遗漏的问题吗?(丹尼尔在评论中的相关帖子中提醒了我关于继承问题)

因此,由于堆栈分配通常比堆分配快,但 A 的大小比 B 小,这些折衷是不是即使在使用移动语义的情况下如果不测试性能也无法回答的折衷方案之一?或者一些经验法则什么时候使用一个比另一个更有利?(San Jacinto 纠正了我关于堆栈/堆分配更快,而不是堆栈/堆)

我猜想更多的副本构造会导致相同的性能问题,(3 个副本将〜 3 倍类似的性能损失作为启动第一个实例)。但是移动构造可能更有利的是尽可能使用堆栈???

这是一个相关的问题,但不完全相同。 C++ STL:我应该存储整个对象还是指向对象的指针?

谢谢!

0 投票
3 回答
790 浏览

c++ - 类型转换和使用 std::move() 的区别?

我只是对刚刚添加到最新 C++ 标准中的新函数 std::move() 有点好奇。

看完一篇关于它的文章,发现函数的定义是

这似乎在调用 std::move 和使用强制转换之间没有任何区别。

例如这里,

认为基本没有区别对吗?好吧,我很确定我是对的,但我也知道过于自信总是适得其反。

提前致谢!

0 投票
2 回答
27486 浏览

c++ - std::move() 如何将值传输到 RValues 中?

我只是发现自己没有完全理解std::move().

起初,我用谷歌搜索了它,但似乎只有关于如何使用的文档std::move(),而不是它的结构如何工作。

我的意思是,我知道模板成员函数是什么,但是当我查看std::move()VS2010 中的定义时,它仍然令人困惑。

std::move() 的定义如下。

首先对我来说很奇怪的是参数 (_Ty&& _Arg),因为当我调用如下所示的函数时,

它基本上等于

但是正如您已经知道的,您不能直接将 LValue 链接到 RValue 引用,这让我认为它应该是这样的。

但是,这是荒谬的,因为 std::move() 必须适用于所有值。

所以我想要完全理解它是如何工作的,我也应该看看这些结构。

不幸的是,它仍然令人困惑,我不明白。

我知道这都是因为我缺乏关于 C++ 的基本语法技能。我想知道这些是如何彻底工作的,并且我可以在互联网上获得的任何文件都将受到欢迎。(如果你能解释这一点,那也太棒了)。

0 投票
2 回答
454 浏览

c++ - 使用 std::vector 成员的 std::vector 为类实现移动语义的正确方法

我有一个类,它的成员是向量的向量。我想为这个类编写一个构造函数,它将对单个向量的 r 值引用作为参数,并将其作为向量参数的单个元素向量移动到成员向量中。到目前为止,我有:

这似乎工作正常,但我不确定std::move周围vec是否有必要。或者,如果std::vector我写的有点不同,它会为我处理很多事情。

0 投票
1 回答
800 浏览

c++ - C++11 File Streams

Has C++11 move semantics made the use of std::ifstream and std::ofstream easier or safer with regards to exceptions? I guess it depends on the standard library aswell. Any differences there between GCC, ICC and VC++ Compiler?

0 投票
1 回答
320 浏览

string - 在 C++ 字符串构造中移动语义和 R 值引用

C++11 是否会在参数字符串构造中移动语义和 r 值引用,例如

例如假设声明

可以防止多余的堆复制"abc"

如果是这样,它会在不必要的情况下使用const char包装器吗?boost::crefboost::const_string

0 投票
1 回答
214 浏览

c++ - 移动语义和引用语义

我正在编写一个树状容器,其中每个“节点”都有一个带有分支/子树的列表,目前我的头看起来像:

现在第二个构造函数将在内部创建一个树_root- 但是这如何与调用一起工作(忽略私有违规):

我将如何做到这一点Branch*Base.subtrees.begin()引用同一个节点?或者我应该走另一条路。用于add_branch()创建分支/子树?

0 投票
4 回答
14866 浏览

c++ - 移动构造函数和静态数组

我一直在探索 C++ 中移动构造函数的可能性,我想知道在下面的示例中利用此功能的一些方法是什么。考虑这段代码:

在上面的示例中,如果我们跟踪程序(使用 MSVC++ 2011),我们会看到Foo<N>::Foo(Foo<N>&&)在构造时调用了foo,这是所需的行为。但是,如果我们没有Foo<N>::Foo(Foo<N>&&),Foo<N>::Foo(const Foo<N>&)则会被调用,这将执行冗余复制操作。

我的问题是,如代码中所述,对于这个使用静态分配的简单数组的特定示例,有没有办法利用移动构造函数来避免这种冗余副本?

0 投票
3 回答
5026 浏览

c++ - 移动是否会使对象处于可用状态?

假设我有两个向量,我将一个移到另一个,v1 = std::move(v2); 在此之后仍将v2处于可用状态?