[英]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.