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