默认分配运算符检查自我分配

问题描述 投票:0回答:1

我想知道赋值运算符的默认实现是否检查自赋值,因此可以将这两个实现中的哪个视为最接近默认赋值:

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,但与此无关。

c++ operators standards
1个回答
0
投票

否,实现不检查“自身”:

https://en.wikipedia.org/wiki/Assignment_operator_(C%2B%2B)

<< [copy分配运算符,通常简称为“ assignment运算符“,是赋值运算符的特例,其中源(右侧)和目的地(左侧)相同类类型。

这是特殊的成员函数之一,这意味着它的默认版本是由如果程序员没有声明一个编译器。

默认版本执行

memberwise copy

,其中每个成员都由自己复制复制赋值运算符(也可以是程序员声明的或编译器生成)。
© www.soinside.com 2019 - 2024. All rights reserved.