C++:"T a = b" - 复制构造函数或赋值运算符?

Yin*_*ong 4 c++ copy-constructor assignment-operator

假设T是一个C++类,如果我这样做T a = b;,是复制构造函数还是赋值运算符?

我当前的实验显示复制构造函数被调用,但不明白为什么.

#include <iostream>
using namespace std;

class T {
 public:
  // Default constructor.
  T() : x("Default constructor") { }
  // Copy constructor.
  T(const T&) : x("Copy constructor") { }
  // Assignment operator.
  T& operator=(const T&) { x = "Assignment operator"; }
  string x;
};

int main() {
  T a;
  T b = a;
  cout << "T b = a; " << b.x << "\n";
  b = a;
  cout << "b = a; " << b.x << "\n";
  return 0;
}

$ g++ test.cc
$ ./a.out
T b = a; Copy constructor
b = a; Assignment operator
Run Code Online (Sandbox Code Playgroud)

谢谢!

bst*_*our 6

调用复制构造函数是因为

T a = b;
Run Code Online (Sandbox Code Playgroud)

具有相同的效果

T a(b);
Run Code Online (Sandbox Code Playgroud)

这是一个初始化,而不是一个任务.长话短说,这就是语言的运作方式.

  • 这两行不是*相同* (6认同)
  • 第一个是[复制初始化](http://en.cppreference.com/w/cpp/language/copy_initialization).第二个是[直接初始化](http://en.cppreference.com/w/cpp/language/direct_initialization).我认为OP正在询问分配与初始化. (6认同)