![]() |
1
4
函数需要一个值而不是引用,因此当引用作为参数传递时,将生成某个对象的副本。 当你通过 左值 引用,参数将成为与所述引用绑定的对象的副本-它正在 复制构造 . 你有一个 对象 ,A 对该对象的引用 和A 基于所述对象创建的复制构造参数 . 当你通过 价值 参考,似乎不是很多东西都变了。你仍然有 一些物体 一些 对它的引用 和 正在基于原始对象创建的另一个对象 , 但是 这一次,新创建的对象是通过 移动构造函数 .
有什么区别?对于基元类型,无。移动和复制
在这个例子中,评论说得很少。我们已经确定,在这里我们复制构造,在那里我们移动构造。但这实际上意味着什么?
移动一个对象并不是那么简单的话题。我鼓励你阅读
this answer
以获得一些见解。丁博士,当你
移动
安
结论:
前两个电话打给
|
![]() |
2
1
在示例代码中:
功能
调用站点上发生的情况取决于
然后参数将由不同的构造函数处理。 但也可能是foo只有一个复制构造函数。也许是因为搬家对这门课没什么好处:
然后,两个调用最终都是相同的。 甚至可能是(稍微有点反常的)类通过删除move构造函数来禁止移动:
然后第二个调用将失败。 所以-看情况而定! |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |