C++识别不同的运算符=

C++ Identify different of operator =

本文关键字:运算符 识别 C++      更新时间:2023-10-16
MyClass& operator=(const MyClass& other)
{
   //Implement
   return *this;
}
MyClass operator=(const MyClass& other)
{
   //Implement
   return *this;
}
void operator=(const MyClass& other)
{
    //Implement
}

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

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

这取决于你如何测试你的课程,即:

void foo (MyClass& a);
MyClass a1;
MyClass a2;
foo(a1 = a2);

在第二个运算符实现(返回MyClass(的情况下,上面的代码(在foo内部(不会修改a1实例,而是一个临时值。

在几乎本书中,我看到第一个方法(MyClass&(的使用次数超过第二种方法。

这是正确的,在分配运算符中返回对*this的引用更正确

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

第一个版本是更快和正确的,因为它不做任何对象的复制,也更合适,因为这是原始类型的行为方式,即:

int n = 0;
int k = 10;
(n = k) = 1;
std::cout << n;

在输出中,您将得到1,因为(n = k)返回对n的引用。