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

c++ - std::move 一个将被覆盖的变量

我跑了一些代码

我有个问题。为什么我们必须使用 std::move oninit即使initis int

0 投票
2 回答
108 浏览

c++ - 使用 std::move(str) arg 传递值/引用/右值

我有以下代码:

i是按值传递时,d变为空,但d如果我们通过引用或右值引用传递,则保留其形式。有人可以解释发生了什么吗?

我知道这std::move实际上并没有移动任何东西,而是通过将其转换为 xvalue 来使它所接收的变量可移动。

d顺便说一句,如果将当前状态的代码强制转换为 x 值,为什么会编译?func当前设置为通过值参数而不是通过右值引用传入。

0 投票
1 回答
382 浏览

c++ - 第一个参数没有从“A”到“A &&”的已知转换

我是 C++ 中 r 值和 l 值的新手。我在玩它。我不确定为什么以下代码有效:

但是如果我将 printA 方法更改为以下代码,则代码无法编译:

void printA(A&& b)以下是完整代码:

编译器抛出以下错误:

candidate function not viable: no known conversion from 'A' to 'A &&' for 1st argument

我知道我们可以通过使用 将 l-value 转换为 r-value 引用来使上述代码工作,std::move但不知道为什么我在帖子开头分享的代码工作正常!

有人可以告诉我我在这里做错了什么吗?谢谢!

0 投票
2 回答
267 浏览

c++ - 为什么 std::move 不将源变量更改为默认移动构造函数中的默认值?

我试图理解移动构造函数。

我在类的构造函数中分配内存并在析构函数中销毁它。

当我尝试移动班级时,我仍然有双倍免费。

为什么std::move不更改为 nullptr other.a_

如果移动构造函数是默认的,我也会遇到同样的问题。

我发现了以下问题,但我仍然不知道为什么移动运算符不将源变量更改为默认值。

std::move 如何使原始变量的值无效?

C ++如何将对象移动到nullptr

C++ std::move 指针

0 投票
2 回答
534 浏览

c++ - std::move(const shared_ptr reference) 是什么意思?

以下是我正在尝试的玩具代码......我理解第一个和第二个。第一个将所有权授予_p. 第二个复制p_p. 但是第三个没看懂。。。

std::move是什么const shared_ptr &意思?谢谢你。

结果是:

(更新:添加评论以澄清哪个是第一个,第二个等)

0 投票
0 回答
49 浏览

c++ - 将我的线程计时器类移动到一个向量中并在同一个循环中开始有一个奇怪的效果

我有一个我写的计时器类。任何单个计时器似乎都可以完美运行。我试图将它们的负载添加到向量并启动它们的负载,但是因为它有一个线程成员,我需要编写一个移动/复制构造函数。我决定让它只移动(非复制)。所以现在我可以将计时器添加到向量中(注意底部的完整代码链接)。

但是我注意到一些奇怪的行为。这是我将计时器添加到向量的方法(请参见注 1 和 2):

当我运行它时,我得到以下输出(每个计时器都应该打印它的数字,所以 0,1 和 2):

当我删除第二个循环并重新启用在我得到的第一个循环内启动计时器时(每个计时器应该打印它的编号,但只有 2 个正在打印):

这是关于非工作循环的 Godbolt 设置的完整代码: https ://godbolt.org/z/fFtjt2

两者似乎都输出正确数量的移动/析构函数以及在正确的时间等。但我无法在这里发现问题。我的猜测是我做错了移动构造函数,但我不明白为什么。

0 投票
3 回答
725 浏览

c++ - 分配 std::vector到 std::vector无需复制内存

我有一个返回一个函数std::vector<std::byte>

我知道这std::byte不是字符类型也不是整数类型,并且只能通过类型转换将其转换为 char。到目前为止,一切都很好。

所以我想(在我知道向量只包含字符数据的情况下)将底层缓冲区的所有权从std::vector<std::byte>a 转移到std::vector<char>using std::move,以避免复制整个底层缓冲区。

当我尝试这样做时,我收到此错误:

不存在从“std::vector<std::byte, std::allocatorsstd::byte>”到“std::vector<char,std::allocator>”的合适的用户定义转换

这完全可能使用 C++ 吗?我认为有真正的用例想要这样做

0 投票
2 回答
484 浏览

c++ - 当 std::move 使用 c 样式数组或不可移动对象时会发生什么

对于 c 样式数组,会发生什么 float *fp1 = std::move(fp); 如下代码(1),和float *fp1 = fp; 一样吗?如下代码(2),我打印结果,似乎它们是相同的。一般来说,如果对象不可移动,std::move 什么也不做,对吧?

0 投票
1 回答
329 浏览

c++ - std::move 可以移动内置类型或 c 指针或数组吗

我有3个问题:

  1. 可以std::move移动内置类型吗?

a是无效值吗?


  1. 可以std::move移动指针

a变成无效指针还是nullptr


  1. 可以std::move移动交流阵列吗?

a.array变成无效数组吗?

0 投票
1 回答
203 浏览

c++ - 在没有赋值的情况下调用 std::move() 会发生什么

当我std::move没有任何分配就使用时会发生什么?