我想知道赋值运算符的默认实现是否检查自赋值,因此可以将这两个实现中的哪个视为最接近默认赋值:
class A{
int x;
public :
...
// first one
A& operator=(const A& a){
if(this != &a) x = a.x;
return *this;
}
// second one
A& operator=(const A& a){
x = a.x;
return *this;
}
}
我已经搜索了C ++标准,但是我只能找到的是this,但与此无关。
否,实现不检查“自身”:
https://en.wikipedia.org/wiki/Assignment_operator_(C%2B%2B)
<< [copy分配运算符,通常简称为“ assignment运算符“,是赋值运算符的特例,其中源(右侧)和目的地(左侧)相同类类型。
这是特殊的成员函数之一,这意味着它的默认版本是由如果程序员没有声明一个编译器。默认版本执行
memberwise copy
,其中每个成员都由自己复制复制赋值运算符(也可以是程序员声明的或编译器生成)。