Object::Object(int x);
Object::~Object;
Object::Object(const &object);
致电时:
Object o=13;
我认为它分为两步;
Object temp(13);
Object o=temp;
所以它会调用copy构造函数,但我打印信息: 没有任何复制构造函数被调用。
那么有人可以帮忙解释一下吗? 我认为它应该与NRVO或RVO无关。
答案 0 :(得分:0)
您的示例中有复制构造函数的省略。
来自c ++标准:
复制/移动操作的省略,称为复制省略,是 在下列情况下允许(可以合并到 消除多份副本):
...
- 当一个临时类对象时 未被绑定的引用(12.2)将被复制/移动到 类对象具有相同的cv-unqualified类型,复制/移动 通过直接构造临时对象可以省略操作 进入省略的复制/移动目标
还有一个重要的注意事项:
[注意:必须执行此两阶段重载决策 无论是否会发生复制。它决定了 如果未执行elision则调用的构造函数,以及所选的 即使呼叫被省略,也必须可以访问构造函数。 - 后注]