考虑如下代码:

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

C++ Guaranteed Copy Elision相关推荐

  1. 有保证的复制消除(Guaranteed Copy Elision)

    作者:Jonas Devlieghere 原文地址:https://jonasdevlieghere.com/guaranteed-copy-elision/ 新的 C++ 17 标准带来了很多令人兴 ...

  2. C++ - Copy Elision

    Copy Elision C++11/14/17编译器优化:省略不必要的拷贝 至少包括以下两项内容: 返回值优化(RVO),即通过将返回值所占空间的分配地点从被调用端转移至调用端的手段来避免拷贝操作. ...

  3. C++17之省略不必要的拷贝Copy Elision

    从C++发展历史看来,c++ 17引入了一个规则,要求在满足一定的条件下避免对象的复制,这在以前是可选的.C++17中一个叫做强制复制省略的技术就是基于这个观点的. 至少包括以下两项内容: 1. 返回 ...

  4. C++编程法则365条一天一条(358)copy elision(返回值优化NVO和具名返回值优化NRVO)

    文章目录 强制编译器实现的优化 非强制实现优化 参考:https://en.cppreference.com/w/cpp/language/copy_elision Elision 是省略.删节或者忽 ...

  5. C++ Copy Elision

    故事得从 copy/move constructor 说起: The default constructor (12.1), copy constructor and copy assignment ...

  6. c++的复制省略(copy elision)

    学习 A simple C++11 Thread Pool 时,发现函数返回了std::future,而std::future的拷贝构造和拷贝赋值都是delete的,感觉有点怪,查了一下,看到 编译器 ...

  7. Copy Elision

    最近写程序的时候突然意识到了一个(也许大多数人早就意识到的)很常见的问题.我们知道复制一个对象(尤其是复杂的对象/实例)往往需要不小的计算开销(更别提复制一个数组的对象了).但另一方面,复杂对象(群) ...

  8. C++ Copy Elision 1

    故事得从 copy/move constructor 说起: The default constructor (12.1), copy constructor and copy assignment ...

  9. C++ 的 Copy Elision

    Copy Elision 我们都讨厌 copy ? 如何避免 copy ? 强制性 Copy Elision 非强制性 Copy Elision 总结 我们都讨厌 copy ? 关于 copy (拷贝 ...

最新文章

  1. java 转换上传文档_自己编写JAVA环境下的文件上传组件 (转)
  2. python网页优化公司_使用python优化scipy.optimize.minimize公司
  3. [optee]-TA的签名和验签
  4. VTK:Filtering之Glyph2D
  5. CH - 0802 占卜DIY(简单模拟,水题)
  6. java 三维数组长方体求体积_已知任意一个四面体的六条棱长,如何求出其体积?...
  7. POJ1661 Help Jimmy(dp)
  8. 马云湖畔大学开学致辞:企业家要比谁都相信未来
  9. 基于IdentityServer4的单点登录——项目基本结构与流程
  10. 名片夹android布局代码,Android自定义布局实现仿qq侧滑部分代码
  11. Flutter社区和资源传送门
  12. websocket传输数据大小限制_WebSocket基础知识笔记
  13. 未来教育计算机二级c语言程序设计题,未来教育版计算机二级C语言题库.doc
  14. 一些很有用的JS特效
  15. win10网络工作组看不到其他计算机,win10系统工作组不显示其他计算机的解决方法...
  16. 最小的k个数(堆排序实现)
  17. 如何在Google Chrome浏览器中举报网络钓鱼和恶意网站
  18. c语言和plc编程,PLC编程-C语言PPT学习课件
  19. oracle 存储过程 exception,oracle存储过程中exception问题
  20. 直播类的项目学习汇总

热门文章

  1. 【笔记】《Federated Learning With Blockchain for Autonomous Vehicles Analysis and Design Challenges》精读笔记
  2. 微信小程序一星期入门-完结篇--电影详情页的制作
  3. 基于python+openCV的中值滤波
  4. RocketMQ基础提高进阶demo实例应用
  5. 马云:阿里巴巴要培养更多的京东并让这些企业挣钱
  6. 自动化状态监测和工业4.0解决方案-Softing uaGate SI
  7. vsftpd安装以及配置FTP虚拟用户实践
  8. AOP术语、SpringAOP
  9. 关于Tomcat中文乱码问题的探究
  10. matplotlib柱状图上方显示数据_Python基础数据可视化