问题标签 [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.
c++ - 无法使用带有 std::move 的自定义删除器插入 std::unique_ptr
我使用std::unique_ptr
带有自定义删除器的 a 作为 a 的值,std::map
如下所示:
插入值时,我使用std::move
,但它不会编译。
我究竟做错了什么?
您会看到以下链接的错误。
c++ - std::tuple 和移动语义
我想知道两件事。
1.搬家std::tuple
值得吗?例如,std::tuple<int, int, int>
我们会得到什么吗?它会比复制或通过引用传递更快吗?
2.在下面给出的例子中,这两者之间有什么真正的区别吗?
c++ - C++11:带有 std::move() 的“decltype 类实例声明”不调用“移动构造函数”。为什么?
我最近开始使用c++,我选择学习c++11特性。但是 c++ 代码的运行方式有时并不那么具体。
下面是我的代码。在decltype(std::move(sample)) sample2 = std::move(sample);
我不确定为什么这条线不调用移动构造函数的部分。你能解释一下为什么吗?
它是在 [ubuntu 16.04 LTS] 和 [gcc 5.4.0] 上编译的
c++ - std::vector 的前地址是否移动不变?
在以下代码段中:
C++ 标准是否保证b_ptr
总是等于a_ptr
after std::move
?在wandbox打印上运行代码TRUE
。
c++ - 在 unique_pointers 上使用 std::move 在初始化列表中出现令人困惑的错误
我从这个构造函数中得到这个错误
严重性代码描述项目文件行抑制状态错误
(active) E0289 no instance of constructor "std::unique_ptr<_Ty, _Dx>::unique_ptr [with _Ty=InputComponent, _Dx=std::default_delete<InputComponent>]" matches the argument list
代码:
我被卡住了,因为这个例子对我有用,而且看起来和前面的一样:
这两者有什么区别?为什么上面的不工作?
注意我没有在InputComponent
、GraphicsComponent
或中实现任何类型的构造函数、析构函数或复制构造函数LogicComponent
。
其实这是InputComponent
c++ - std::move 如何使原始变量的值无效?
在cpp 参考的以下示例中:
使用std::move
可能会导致原始值丢失。对我来说,它看起来像
导致v[1]
创建一个新成员。然后,
但为什么它会损害 中的价值str
呢?它没有任何意义。
有许多复杂的教程std::move
比我自己的问题更难理解。
有人可以写吗
在其等效使用c++03
?
我寻找一种易于理解且不包含诸如x-value
、static_cast
、remove_reference
等先决条件的解释,因为它们本身需要先理解std::move
。请避免这种循环依赖。
这些链接也不能回答我的问题:7510182、3413470
因为我有兴趣知道str
伤害是如何产生的,而不是会发生什么v[1]
。
伪代码也很受欢迎,只要它像c++03
.
更新:为避免复杂化,让我们考虑一个更简单的示例,int
如下所示
c++ - 带有内部对象的 std::move - 不匹配调用
下面的代码无法编译。主要的:
预设.h:
我想 std::move 不会从引用转换为右值。任何想法如何实现如此深的移动c-tor?我想我错过了一些东西,但不明白到底是什么
c++ - 使用 std::move 传入一个临时 lambda,或“拉”出一个临时参数,有什么区别?
我有以下(人为的)代码,其中我有一个带有单个打印函数的打印机类和一个处理字符串然后调用打印函数的回调函数的工作类:
注意:我已经std:: move()
打过两次电话了……现在这行得通(令我惊讶),但我两者都只是为了展示我正在尝试的内容。我的问题是:
- 我应该
std::move()
在set_callback()
函数中使用来“拉”出温度,如果我使用它,真的有一个副本还是std:: move(
) 意味着它不是真正的副本? - 我应该
std:: move()
用来传递 lambda 吗……这是否正确。 - 我想我不明白为什么这段代码适用于两个
std:: moves()
......这意味着我仍然不明白std:: move()
在做什么 - 所以如果有人能告诉我这里发生了什么,那就太好了! - 我知道我可以按值传递,但我的目标是移动 temp 以便我没有它的副本。这就是完美转发的意思吗?
我的示例可以在 wandbox 中看到:https ://wandbox.org/permlink/rJDudtg602Ybhnzi
更新 我尝试使用 std::move 的原因是为了避免复制 lambda。(我认为这称为转发/完美转发)......但我认为我正在对其进行哈希处理!
c++11 - 转换为右值引用以“强制”在返回值中移动 - 澄清
好的,我开始了解右值引用的要点(我认为)。我有我正在编写的这段代码:
所以我有一个简单的例子,我有一个返回字符串副本的函数。我已经读过它不好(并得到了核心转储来证明它!)返回对本地临时变量的任何引用,所以我不考虑尝试。
在main()
我不想复制构造该字符串的分配中,我想移动构造/分配字符串以避免复制字符串太多。
Q1:我返回了 temp var 的“副本”,
get_string()
但我已将返回值转换为 rvalue-red。那是没有意义的,还是在做任何有用的事情?Q2:假设 Q1 的答案是我不需要这样做。然后我是将 temp 变量的新副本移动到 中
my_string
,还是直接将 temp 变量移动str
到my_string
.Q3:为了将字符串返回值存储到“外部”(在我的情况下是 main())变量中,您需要的最小副本数是多少,以及您如何做到这一点(如果我还没有实现它)?
c++ - 使用 std::move 返回一个对象并链接函数
我创建了一个以这种方式返回对象的方法:
稍后在我的代码中,我想将该方法与这样的链式调用一起使用:
而且它不起作用,对“doAnotherThing”的调用依赖于一个空对象。我知道如何解决这种情况:
我的问题是:首先,方法写对了吗?如何避免编写第二种用法?实在是太难看了……
注意:“MyObject”是可移动的。