关于C中的构造函数和赋值运算符
发布时间:2020-12-16 07:49:41 所属栏目:百科 来源:网络整理
导读:我只是创建了一个这样的类: class GreatClass{public: GreatClass(){cout"Default Constructor Called!n";} GreatClass(GreatClass gc){cout"Copy Constructor Called!n";} GreatClass(const GreatClass gc){cout"Copy Constructor (CONST) Called!n";}
我只是创建了一个这样的类:
class GreatClass { public: GreatClass(){cout<<"Default Constructor Called!n";} GreatClass(GreatClass &gc){cout<<"Copy Constructor Called!n";} GreatClass(const GreatClass &gc){cout<<"Copy Constructor (CONST) Called!n";} ~GreatClass(){cout<<"Destructor Called.n";} GreatClass& operator=(GreatClass& gc){cout<<"Assign Operator Called!";return gc;} const GreatClass& operator=(const GreatClass& gc){cout<<"Assign Operator (CONST) Called!";return gc;} }; GreatClass f(GreatClass gc) { return gc; } 在main()函数中,有两个版本: 版本#1: int main() { GreatClass g1; GreatClass G = f(g1); } 版本#2: int main() { GreatClass g1; f(g1); } 它们都生成SAME输出: Default Constructor Called! Copy Constructor Called! Copy Constructor Called! Destructor Called. Destructor Called. Destructor Called. 我不明白为什么在将f(g1)分配给G时没有发生任何事情.此时调用了什么构造函数或运算符? 谢谢. 解决方法
在某些情况下,允许编译器实现删除/删除复制构造函数调用,您指定的示例是这种情况的一个很好的示例用例.不是创建临时对象然后将其复制到目标对象,而是直接在目标对象中创建对象,并删除复制构造函数调用.
此优化称为通过Return value optimization复制省略. 此外,使用C 11 move semantics through rvalue references可能会启动而不是复制语义.即使使用移动语义,编译器仍然可以自由地应用RVO. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- react-native – React Native Webview没有加载任何url(Rea
- WinCE6.0 修改开机Logo方法集锦(三)
- c# – MethodHandle.GetFunctionPointer和Marshal.GetFunct
- PostgreSQL基础2
- flex组件使用【PopUpMenuButton】
- ruby-on-rails – rails 4资产管道图像子目录
- 正式发布jmyetl-1.0.2:一个表数据导入导出的ETL工具
- .net – 运算符重载和Linq总和在C#
- 正则表达式 – 在Swift中的RegularExpression matchesInStr
- Ubantu下配置swift开发环境