理解复制构造函数和复制赋值运算符

use*_*167 -1 c++ copy-constructor copy-assignment

根据我的情况1使用复制赋值运算符,因此输出应该是0 680 87在情况2中它87 87是正常的.

#include <iostream>
using namespace std;
class numbered
{
  static int un;
public:
  int a;
  numbered (): a(un) {un++;}
  numbered(const numbered & n) : a(87){}
  numbered & operator=(const numbered) { a=68; return *this; }
};

int numbered::un=0;

void f(numbered  s){ cout<<s.a;}

int main()
{
  numbered a, b=a;
  cout << a.a << b.a;   //case 1
  f(a);f(b);        //case 2
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Sto*_*ica 5

这个

numbered a, b=a;
Run Code Online (Sandbox Code Playgroud)

也可以这样写:

numbered a, b(a);
Run Code Online (Sandbox Code Playgroud)

这是一行中几个对象的定义.b在这里被构造,所以它被称为复制c'tor.


Zaf*_*ffy 5

它工作正常.

为了获得预期的结果:

numbered a, b;
b = a;
Run Code Online (Sandbox Code Playgroud)