c ++中的运算符重载如何工作

sta*_*k92 1 c++ assignment-operator

我正在阅读一些c ++的赋值运算符理论.

让我们说吧

class MyClass {
private:
   T1 member1;
   T2 member2;
public:
   // The default copy assignment operator which assigns an object via memberwise copy
   MyClass & operator=(const MyClass & rhs) {
      member1 = rhs.member1;
      member2 = rhs.member2;
      return *this;
   }
......
}
Run Code Online (Sandbox Code Playgroud)

c7 = c6; //member wise copy assignment.
Run Code Online (Sandbox Code Playgroud)

这里我们在赋值操作期间返回对象的引用,并为其指定新对象c7.

但是,如果我的代码有点像这样:

    int a=12;
    int &b=a;
    int c=&b;        //error::invalid conversion from ‘int*’ to ‘int’
Run Code Online (Sandbox Code Playgroud)

为什么这与上述情况不同?

Som*_*ude 6

声明

int& b = a;
Run Code Online (Sandbox Code Playgroud)

声明b为引用,并使其引用变量a.

声明

int c = &b;
Run Code Online (Sandbox Code Playgroud)

声明c为普通int变量,然后尝试将其初始化为指向int.&符&根据上下文做不同的事情.


对于复制赋值运算符,在初始化声明中的变量时不会调用它,而是调用复制构造函数.


当你有一个拷贝赋值运算符,并且例如

MyClass a, b;

a = b;  // Copy-assignment operator called
Run Code Online (Sandbox Code Playgroud)

编译器基本上用以下调用替换赋值

a.operator=(b);
Run Code Online (Sandbox Code Playgroud)

换句话说,它是一个普通的成员函数调用,就像任何其他函数一样.