问题标签 [stdmove]

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 投票
1 回答
131 浏览

c++ - 重载一个接受右值引用的类构造函数

我想做类似以下的事情:

  • 这是一般重载构造函数的有效方法吗?
  • 特别是一个将右值引用作为参数的?

根据评论编辑

澄清一下,我是移动语义的新手(也是一名业余程序员),我只是不确定这是否是处理这种情况的好方法。

我根据评论(现已删除)添加了第一个问题,该评论表明这不是重载构造函数的正确方法。

0 投票
1 回答
93 浏览

c++ - 当我执行 int a = std::move(b) (b 也是 int)时,它与 a = b 相同吗?

当我执行 int a = std::move(b) (b 也是 int)时,它与 a = b 相同吗?

0 投票
2 回答
89 浏览

c++ - 分配给被移动的 std::function 是否合法

以下代码是否合法:

它按预期编译和运行 - http://cpp.sh/2smb3,但我担心在 f 移动后分配给 f 可能会调用未定义的行为。

0 投票
3 回答
192 浏览

c++11 - 无法将函数绑定到 std::function将 std::move() 对象作为函数参数传递时

尝试编译以下代码片段:

收到以下错误:

在函数 'int main()': 15:90: 错误:从 'std::_Bind_helper&&, int), std::promise, int>::type {aka std::_Bind, int))(std:: promise&&, int)>}' 到非标量类型 'std::function' 请求

我知道这与函数参数 std::promise&& 以及对 std::move 的需要有关,但我被卡住了。

0 投票
2 回答
48 浏览

c++ - 在分配字符串时分配右值引用

我正在学习右值引用,我的大脑可能到处都是。但我想测试 std::move 和 rvalue 引用,下面是代码片段

两种情况下的输出是相同的。“你好”

我希望在创建 s2 时在块内,它会调用移动赋值运算符,从而确保 s1 没有指向任何东西,但这并没有发生。

我的理由是字符串在其中携带一个指向 char 的指针,因此当调用移动指针时,它将移动内存分配因此当我从 s1 移动到 s2 时,打印 s1 应该会导致问题。

我的理解做错了什么。

0 投票
2 回答
126 浏览

c++ - 我应该更改使用 push_back 的代码以使用 std::move 吗?

我刚刚阅读了关于右值引用的内容,下面是我所指的代码

我的问题是,到目前为止,每当我看到对象(或字符串)的向量时,我大多会看到像上面那样完成插入操作。相反,如果我这样做了v.push_back(std::move(s)),我就不会不必要地创建重复的对象。

这是否是向 STL 添加对象的正确方法,我们只关心容器中的数据而不是其他变量。

0 投票
1 回答
1536 浏览

c++ - 尽管参数是 r 值引用,为什么要使用 std::move

我对std::move()在下面的代码中使用感到困惑:

如果我在 (2) 处取消注释行,输出将是:1 2 3但如果我在 (1) 处取消注释行,输出将什么都不是,这意味着std::vector调用了 move 构造函数!

为什么我们必须再次调用std::moveat (1) 才能调用移动构造函数std::vector

我的理解是std::move获取r-value它的参数,为什么我们必须在(1)处 r-value获取?r-value

我认为_v = rv;(2)处的这一行更合乎逻辑,应该使std::vector移动构造函数被调用,std::move因为rv它本身r-value首先是引用。

0 投票
1 回答
414 浏览

c++ - std::swap 在 std::shared_ptr 之间交换,其中 A 具有动态数组

0 投票
1 回答
263 浏览

c++ - 将 std::future 移动到另一个 std::future

我正在尝试将 std::future 类的成员移动到同一类的另一个成员。

我需要这样做,因为如果我想调用 std::vector.push_back(MyClass),我需要用一个简单的引用删除复制构造函数并用双引用创建另一个,因为我的类包含一个 std::future 成员。当我移动 std::future 时,G++ 说:

但对我来说,std::move 返回一个双引用而不是一个单引用。所以我真的不知道这个错误来自哪里。

我尝试了使用双重引用的赋值运算符 = 但也不起作用。

当然我的 std::future 是在主构造函数上初始化的,但是这里不需要粘贴它。两者都不起作用。谢谢指教。

0 投票
1 回答
208 浏览

c++ - 为什么我的代码打印 rvalue 2 次而不是 rvalue & lvalue?

所以我想练习使用std::forward并创建了一个Test有 2 个构造函数的类。1个with T&,另一个withT&&作为过载。T&打印lvalueT&&打印rvalue以便我知道正在使用哪个构造函数。我在堆栈上创建了 2 个类实例,令我惊讶的是,它们都使用了T&&重载。

我尝试使用原始std::forward函数并实现它,但两次都打印了rvalue x2。我究竟做错了什么?