繁体   English   中英

为什么复制构造函数在这种情况下不被调用

[英]Why copy constructor not getting called in this case

说,我有一个A级

现在我在做什么

A a(A()); 

究竟发生了什么?

尽管出现了, A a(A()); 不是对象定义。 相反,它声明了一个名为a的函数,它返回一个A并获取一个函数的指针,该函数不执行任何操作并返回A

如果需要对象定义,则必须添加另一对括号:

A a((A()));

如果写得正确 - A a((A())) - 编译器直接在构造函数上下文中创建临时文件以防止额外的副本。 它被称为复制省略 看看这个,以及RVO和NRVO。

来自你的评论:

A a = A();

完全等同于

A a((A())); // note extra pair of parenthesis 

正如@Naveen正确指出的那样, A a(A()); 是最令人烦恼的解析,所以你需要一套额外的paranthesis来实际创建一个对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM