c++:在函数返回过程中,"catching reference in value"与"catching value in value"有什么区别?



当我们通过返回引用赋值时,在内部 1 和 2 究竟发生了什么?

Class A
{
A& operator= (const A &ax)
{
return *this;
}
}
int main()
{
A a;
A b;
b = a; // -------------- 1
A c = a;  // ----------- 2
}
// ---------------------------------------------------------------

下面(分配的返回值)会发生什么区别?

Class A
{
A operator= (const A &ax)
{
return *this;
}
}
int main()
{
A a;
A b;
b = a; // -------------- 3
A c = a;  // ----------- 4
}

还有一个主要错误,因为operator=私有的并且代码格式不正确,但这可以通过添加public:访问修饰符来纠正。

operator=是从存储到变量的对象调用b因此此赋值变体根本不应执行赋值。

#include <iostream>
class A
{
public:
float a1;
A& operator= (const A &ax)
{
return *this;
}
};
int main()
{
A a; 
a.a1 = 3;
A b; 
b.a1 = 5;
b = a; // -------------- 1
std::cout << b.a1; // outputs 5
A c = a;
std::cout << c.a1; // outputs 3
}

该行

A c = a;

称为初始化并且不使用operator=,而是使用(由编译器生成)复制构造函数,该构造函数执行对象的浅拷贝。

您的错误是成员运算符=旨在将其参数的值分配给thisoperator=返回赋值结果,可用于链接:a=b=c;

A& A::operator= (const A &right)

相当于

A& operator= (A &left, const A &right)

最新更新