PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
Re: [问题] 关于c++11 ctor行为
楼主:
loveflames
(咕啾咕啾魔法阵)
2018-06-24 13:11:51
以前刚好有研究过这个
NRVO:
1.启动条件,缺一不可
return语句为非静态之物件名称
物件与函数返回类型相同,忽略CV修饰
该物件非函数的参数
2.符合以上条件时可省略ctor的呼叫,特别注意以下事项
copy语意仍在
属于implementation-defined
3.阻止NRVO的情况
物件类型与函数返回类型不同,例如两种类型有继承关系时
涉及if/else这种条件分支
return语句不是"物件名称",例如reference(非物件)、三元运算子、物件成员、指标指
向的内容
RVO:
1.启动条件
以prvalue初始相同类型时,忽略CV修饰
2.符合以上条件时可省略ctor的呼叫,特别注意以下事项
copy语意仍在
属于implementation-defined,仅存在C++17以前的版本
guaranteed copy elision:
1.启动条件
以prvalue初始相同类型时,忽略CV修饰
2.符合以上条件时可省略ctor的呼叫,特别注意以下事项
无copy语意
属于standard,C++17以后才有
move ctor:
1.启动条件,择一即可
用std::move包起来
return语句为非静态之物件名称
return语句为prvalue
2.符合以上条件时可呼叫move ctor,特别注意以下事项
有NRVO、RVO、guaranteed copy elision时不考虑这个
3.阻止move的情况,此时会呼叫copy ctor
所选ctor的参数类型不是该变量类型的rvalue ref时,以lvalue重新选择(两类型有继承
关系时发生)
物件不可为const,因为T(T&&)不吃const
return语句不是"物件名称",例如reference(非物件)
作者:
ilikekotomi
(Young)
2018-06-24 14:26:00
感谢整理
作者:
a58524andy
(a58524andy)
2018-06-24 16:23:00
感谢整理 总之Q2中g把吃进来的rvalue ref当成xvalue但是这个xvalue还是一个reference,因此不会用mv ctor比较不懂的是copy semantics的保留与否是什么意思呢?
作者: firose (guest也是也是也是也是也)
2018-06-24 17:09:00
就是需不需要存在的意思 你要先能存取才能 copy elision
作者:
a58524andy
(a58524andy)
2018-06-24 23:46:00
喔喔
https://goo.gl/8vVaVX
另参照这里 总之c++17对于部分写法直接当作没有copy这个语意存在了感谢提点
作者:
KanzakiHAria
(神崎・H・アリア)
2018-06-25 04:19:00
也太复杂XD
继续阅读
[问题]关于阵列字串回传主程式的问题
hunkchen2016
[问题] 关于c++11 ctor行为
a58524andy
[问题] 请问有关于 C 程式的接口设计
gowrite
Re: [问题] template class 内 static 初始问题
sarafciel
[问题] 模拟内存大小
s0972584
[问题] C的读档问题
mjforever
[问题] template class 内 static 初始问题
lovejomi
[问题] opencv存图片时,一直发生错误
ponwar87123
[问题] map insert错误问题
waquey
[问题] switch控制与while
Ruid
Links
booklink
Contact Us: admin [ a t ] ucptt.com