C++ 在声明然后分配对象的情况下创建的临时对象
我修复了一个用户定义的类,带有一个默认构造函数、一个参数构造函数和一个赋值运算符 当我声明一个对象并分配它时:C++ 在声明然后分配对象的情况下创建的临时对象,c++,C++,我修复了一个用户定义的类,带有一个默认构造函数、一个参数构造函数和一个赋值运算符 当我声明一个对象并分配它时: Fixed a; a = Fixed( param ); 我得到: 调用默认构造函数(第1行) 调用参数构造函数(第2行) 呼叫分配操作员(第2行) 调用析构函数(第2行) 当然,我可以(也应该)更喜欢初始化(修复了一个(参数))而不是赋值。 但我想知道第二行发生了什么。 是否创建了临时对象 以下是我对临时对象的发现 在某些情况下,编译器有必要创建临时 物体。可以为以下对象创建这些临
Fixed a;
a = Fixed( param );
我得到:
修复了一个(参数)
)而不是赋值。
但我想知道第二行发生了什么。
是否创建了临时对象
以下是我对临时对象的发现
在某些情况下,编译器有必要创建临时
物体。可以为以下对象创建这些临时对象
原因:
存储返回用户定义值的函数的返回值
类型仅当您的程序没有创建临时表时,才会创建这些临时表
将返回值复制到对象。
在这里,程序会复制对象的返回值,那么为什么会创建临时对象呢
是否创建了临时对象
对
表达式Fixed(param)
将创建一个临时对象。然后,该临时对象将传递给a
对象的赋值运算符
声明
a = Fixed( param );
在某种程度上相当于
{
Fixed temporary_object( param );
a.operator=( temporary_object );
}
存储返回用户定义类型的函数的返回值。仅当程序未将返回值复制到对象时,才会创建这些临时值
你说的那句话无关紧要<代码>固定(参数)不是函数调用
这一行指的是:
Fixed f(param) {
return Fixed(param);
}
...
Fixed a;
a = f(param);
在这种情况下,该行说明不应该创建一个临时文件来保存f
的结果,然后将其复制到a
。这将是您在上面看到的内容之外的内容
还可以尝试优化级别