当调用对象o = 13时,不能调用复制构造函数;

时间:2014-03-04 01:29:42

标签: c++ copy-constructor

Object::Object(int x);
Object::~Object;
Object::Object(const &object);

致电时:

Object o=13;

我认为它分为两步;

Object temp(13);
Object o=temp;

所以它会调用copy构造函数,但我打印信息: 没有任何复制构造函数被调用。

那么有人可以帮忙解释一下吗? 我认为它应该与NRVO或RVO无关。

1 个答案:

答案 0 :(得分:0)

您的示例中有复制构造函数的省略。

来自c ++标准:

  

复制/移动操作的省略,称为复制省略,是   在下列情况下允许(可以合并到   消除多份副本):

...

  

- 当一个临时类对象时   未被绑定的引用(12.2)将被复制/移动到   类对象具有相同的cv-unqualified类型,复制/移动   通过直接构造临时对象可以省略操作   进入省略的复制/移动目标

还有一个重要的注意事项:

  

[注意:必须执行此两阶段重载决策   无论是否会发生复制。它决定了   如果未执行elision则调用的构造函数,以及所选的   即使呼叫被省略,也必须可以访问构造函数。 - 后注]