C++ C++;识别不同的操作员=

C++ C++;识别不同的操作员=,c++,C++,当我测试这些方法时,结果是一样的。在几乎所有的书中,我看到第一种方法(MyClass&)比第二种方法使用得更多。他们之间有什么不同?哪种方法是真正正确和快速的?一个方法返回地址和第二个返回值 当我测试这些方法时,结果是一样的 这取决于你如何测试你的班级,即: MyClass& operator=(const MyClass& other) { //Implement return *this; } MyClass operator=(const MyClass&

当我测试这些方法时,结果是一样的。在几乎所有的书中,我看到第一种方法(MyClass&)比第二种方法使用得更多。他们之间有什么不同?哪种方法是真正正确和快速的?一个方法返回地址和第二个返回值

当我测试这些方法时,结果是一样的

这取决于你如何测试你的班级,即:

MyClass& operator=(const MyClass& other)
{
   //Implement
   return *this;
}
MyClass operator=(const MyClass& other)
{
   //Implement
   return *this;
}
void operator=(const MyClass& other)
{
    //Implement
}
在第二个操作符实现的情况下(返回
MyClass
),上述代码(在
foo
内)将不会修改
a1
实例,而是一个临时值

在几乎所有的书中,我看到第一个方法(MyClass&)的使用超过了 第二种方法

这是正确的,在赋值运算符中返回对
*this
的引用更为正确

他们之间有什么不同?哪种方法是真正正确和快速的

第一个版本更快、更正确,因为它不复制对象,也更合适,因为基本类型就是这样工作的,即:

void foo (MyClass& a);

MyClass a1;
MyClass a2;

foo(a1 = a2);
int n=0;
int k=10;
(n=k)=1;

同样,你不能通过返回值重载,编译器应该抱怨那些函数调用是不明确的。哦,是的,我只是用它们依次测试。不是同一时间:多凯,这也是我所怀疑的函数签名与返回值没有区别。
int n = 0;
int k = 10;
(n = k) = 1;
std::cout << n;