c++ copy elision,RVO, 省略不必要的构造和析构, std::move

来源:互联网 发布:淘宝买家秀震动棒 编辑:程序博客网 时间:2024/06/16 18:31

以前c++11 提供了std::move,也就是强行转换到右值,配合移动构造,移动赋值,在实现中将右值的数据窃取过来,并将右值的状态设置好,即可减少许多不必要的操作。


今天查c++11/14/17标准的时候看到了 copy elision 这个东西,也就是说不用上面那一套,直接写成最简便的形式,编译器会帮我们达到最优的方式。

看到了许多以前的讨论,编译器到底能否实现这个还是需要实践上去确认的。

也看到c++11 说到了copy elision


又看到c++17似乎将这个列到了标准里面,不知道以后是不是就可以放心大胆的靠编译器了。

(c++17从标准上保证某些情况下的copy elision,

https://en.wikipedia.org/wiki/C%2B%2B17,

标准文档还没去找)



而且只能选择一种,不能又想用move又想用copy elision,详见下面蓝色大神的日志



当然,写成类似下面这样总是没错

void foo( MyClass& mc);

这种,直接在其他地方完全控制生命期,函数里面操作对象即可,不用操心返回什么的



附上一些资料,多是讲过去的情况。。

知乎大神 蓝色 的日志

https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en


https://www.zhihu.com/question/29511959/answer/44617879


原创粉丝点击