【发布时间】:2021-01-22 09:42:08
【问题描述】:
我正在阅读这本书:“C++:完整参考”,4e。在复制构造函数的话题中,写了以下内容:
重要的是要理解 C++ 定义了两种不同类型的情况,其中一个对象的值被赋予另一个对象。第一个是作业。第二种是初始化,它可以通过以下三种方式中的任何一种发生:
- 当一个对象显式初始化另一个对象时,例如在声明中。例如。我的类 x = y;
- 将对象的副本传递给函数时。例如。函数(y); // 其中 y 是某个类的对象。
- 生成临时对象时(最常见的是作为返回值)。例如。 y = 函数(); // y 接收一个临时的返回对象。
我了解第一种和第二种情况,但不了解第三种情况。
在第三种情况下,如果函数返回一个临时对象,为什么 y 和临时对象之间不会发生 assignment 操作?
初始化的必要性是什么?
如果初始化正在发生,它发生在哪里?我的意思是,什么被初始化了?
【问题讨论】:
-
要稍微复杂一点,请阅读copy elision。
-
你不能在 C++ 中使用一个对象,直到它没有被初始化。赋值使用现有对象,这意味着您需要先初始化它。顺便说一句,对类对象
x的赋值有时可能会更好地可视化为x.operator=(arg)而不是x=arg。这清楚地表明您只是在使用一个对象,就像在其上调用任何其他(非特殊)成员函数一样。
标签: c++ copy-constructor