问题标签 [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 投票
2 回答
199 浏览

c++ - 将左值绑定到右值引用移动 ctor 并返回函数

据我所知,将左值绑定到右值引用是无效的。其次,左值表达式可以通过地址运算符 (&) 作为前缀来识别

如果这两个句子在以下代码中是正确的,我有点麻烦:

我哪里错了?

0 投票
2 回答
992 浏览

templates - 关于 postblit 和 move 语义的问题

前段时间我已经问过一个类似的问题,但我仍然不清楚一些细节。

  1. 什么情况下调用postblit构造函数?

  2. 移动对象的语义是什么?它会被postblitted和/或破坏吗?

  3. 如果我按值返回局部变量会发生什么?它会被隐式移动吗?

  4. 如何将表达式转换为右值?例如,通用交换会是什么样子?

0 投票
3 回答
1217 浏览

c++ - 是否需要销毁移出的对象?

如果我 move-construct afrom b,是否仍然需要destruct b,或者我可以不这样做就逃脱?

optional<T>这个问题在模板的实现过程中闪过我的脑海。摘抄:

当然,我可以将 bool 替换为initialized一个区分已初始化、未初始化和移出的三值枚举。我只想知道这是否是绝对必要的。

0 投票
2 回答
19373 浏览

c++ - 我可以用移出的对象做什么?

标准是否准确定义了一个对象一旦被移出我可以做什么?我曾经认为你可以对一个移动的对象做的就是破坏它,但这还不够。

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

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

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

0 投票
3 回答
2183 浏览

c++ - 移动语义和返回 const 值

我有将所有内容作为“const”值返回的习惯(?!?!?)。像这样...

使用移动操作和右值引用以及以下功能...

我已经写不下去了……

我开始使用返回 const 值的约定的主要原因是为了防止有人编写这样的代码......

用例如下...

看起来好像“返回 const 值”和 r 值引用不会在这个特定用例中混合使用。那正确吗?

无论如何,该对象是临时的。为什么“const”应该阻止移动?为什么我们不能移动“const”临时对象?

0 投票
2 回答
899 浏览

operator-overloading - `M operator+(M&&,M&&)` 的 C++11 重载

更新:澄清,更清晰的重点和缩短的例子:

  • 我可以避免M op+(M&&,M&&)过载吗?假设,我想要很好地处理RValues?我想其他三个重载必需的。

(&&,&&)我首先过载的原因:

  • 通常我不会提供M op+(&&,&&),但我似乎需要它:当提供重载时(&&,&)(&,&&)编译器会变得模棱两可。有没有更好的方法来解决它然后添加另一个实现变体?

您还可以查看完整的代码。

0 投票
2 回答
971 浏览

c++ - 将可修改的右值引用绑定到可修改的左值

我有3个问题:

  1. 我可以将左值直接绑定到右值引用吗?

  2. 那个存在的对象会发生什么std::move()

  3. std::move 和 有什么区别std::forward

0 投票
1 回答
212 浏览

c++ - 参数评估后是否对参数绑定进行排序?

假设我有以下功能:

如果我这样调用函数:

在绑定到参数之前,是否所有参数都已完全评估?在这种情况下,std::move是无害的,因为它只产生一个引用 的 xvalue numbers。或者每个单独的参数是否可以在评估后立即绑定到它的参数?在这种情况下,numbers[0]可能会导致未定义的行为,因为numbers可能已经被移入vec.

0 投票
4 回答
4261 浏览

c++ - Initializer-list-构造一个不可复制(但可移动)对象的向量

可以将push_back不可复制但可移动类型的右值转换为该类型的向量:

但是,当我尝试使用相同的右值初始化向量列表时,我收到有关需要复制构造函数的错误:

GCC 4.7 出现以下错误:

这应该被允许吗?我认为它没有被允许的技术障碍,但我目前手边没有标准......

0 投票
3 回答
12616 浏览

c++ - C ++ linux:错误:'move'不是'std'的成员如何绕过它?