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

Ying Xiong

假设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

谢谢!

胆小鬼

之所以调用复制构造函数是因为

T a = b;

与...具有相同的效果

T a(b);

这是初始化,而不是分配。长话短说,这就是语言的工作方式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

复制构造函数,赋值运算符C ++

C ++复制/移动构造函数和赋值运算符

C ++中的赋值运算符模板和复制构造函数

C++中的复制构造函数和赋值运算符

删除默认C ++复制和移动构造函数和赋值运算符的缺点?

C ++-没有复制构造函数或赋值运算符的数组操作

C ++向量复制构造函数和赋值运算符是否还会复制保留空间?

C ++是否为纯虚拟类创建默认的“构造函数/析构函数/复制构造函数/复制赋值运算符”?

依赖项没有复制构造函数或赋值运算符时的 C++ 初始化器列表

在 C++ 中使用带有字符串的复制构造函数和/或赋值运算符时堆栈溢出

如何为包含 shared_ptr 的类创建复制构造函数/赋值运算符?C++

C ++复制赋值运算符类

是否有必要为具有另一个类 B 的数据成员的类 A 重载赋值运算符和复制构造函数?

C++ 三元运算符调用复制构造函数而不是移动构造函数

在c ++ 98中实现move构造函数和move赋值运算符,以实现更好的性能

通过赋值运算符的C ++动态数组的深层复制

引用对象变量的c ++复制赋值运算符

带有赋值运算符的类的C ++深层复制

Ruby // 运算符 ~ A ||= (B || C)

C ++复制构造函数和=运算符中的重载情况

复制构造函数和Assignemnt运算符重载在C ++中不起作用

C++ 类对象复制构造函数和运算符=

即使类未定义构造函数,也无法在类上调用C ++默认移动赋值运算符

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

使用STL向量复制构造函数与赋值运算符

复制构造函数和默认赋值运算符

C ++构造函数和运算符问题

C ++ std :: stringstream运算符<< vs(构造函数)

C ++链表-构造函数和运算符重载