博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ Guaranteed Copy Elision
阅读量:6624 次
发布时间:2019-06-25

本文共 795 字,大约阅读时间需要 2 分钟。

考虑如下代码:

struct S{    S(){}    // not copyable, not movable:    S(S const &) = delete;    S(S  &&) = delete;};S getS_GCE() {    return S();}int main(){    S s = getS_GCE();    return 0;}

这段话在C++17前是编译不过的。因为在用到拷贝构造函数时,却遇到程序员禁止了它们(=delete标注的函数)。C++17新标准,Guaranteed Copy Elision。prvalue的含义发生变化(是啊,还没听说什么纯右值,广义右值之类的“新”名词,prvalue就改变了定义了)。这段程序片段被神奇的编译通过了!

考虑另一段代码:

struct S{    S(){}    // not copyable, not movable:    S(S const &) = delete;    S(S  &&) = delete;};S getS_NRVO() {    S s;    return s;}int main(){    S s = getS_NRVO();    return 0;}

C++17仍旧编译失败。看来,是因为Guaranteed Copy Elision只适用于特定的情况。此处待研究。

参考:

http://en.cppreference.com/w/cpp/language/copy_elision

https://stackoverflow.com/questions/38043319/how-does-guaranteed-copy-elision-work

转载于:https://www.cnblogs.com/thomas76/p/8576124.html

你可能感兴趣的文章
vue 记一次编译没反应、无进度、没有任何报错的提示,但后台却TM一直消耗内存的BUG:...
查看>>
poj3517
查看>>
iphone http下载文件
查看>>
poj 1195:Mobile phones(二维树状数组,矩阵求和)
查看>>
Codeforces 433 C. Ryouko's Memory Note
查看>>
java中的Static class
查看>>
实例讲解Linux下的makefile
查看>>
json lib 2.4及其依赖包下载
查看>>
计算机中文核心期刊
查看>>
sql的left join 命令
查看>>
8148 8168 中移植live55 出现except rtsp 中途莫名的断流
查看>>
【BZOJ】3832: [Poi2014]Rally
查看>>
[转]看懂ExtJS的API
查看>>
宜昌民生大厦
查看>>
推荐15款制作 SVG 动画的 JavaScript 库
查看>>
转:OpenResty最佳实践(推荐了解lua语法)
查看>>
转:CEO, CFO, CIO, CTO, CSO是什么
查看>>
P2P之UDP穿透NAT的原理与实现 - 增强篇(附修改过的源代码)
查看>>
添加 All Exceptions 断点后, 每次运行都会在 main.m 中断的一种解决方法
查看>>
ROC曲线(receiver-operating-characteristic curve)-阈值评价标准(转)
查看>>