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条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

Java等效于C ++复制赋值运算符

来自分类Dev

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

来自分类Dev

C ++:赋值运算符后的++运算符重载

来自分类Dev

C ++移动语义与智能指针相关的复制构造函数和赋值运算符

来自分类Dev

复制构造函数而不是赋值运算符被调用

来自分类Dev

外部C结构的C ++默认复制/移动赋值运算符不是const

来自分类Dev

C中的赋值运算符重载

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

C ++:使用运算符=调用多参数构造函数

来自分类Dev

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

来自分类Dev

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

来自分类Dev

C ++:运算符new和default构造函数

来自分类Dev

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

来自分类Dev

C ++复制赋值运算符类

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

    Java等效于C ++复制赋值运算符

  3. 3

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

  4. 4

    C ++:赋值运算符后的++运算符重载

  5. 5

    C ++移动语义与智能指针相关的复制构造函数和赋值运算符

  6. 6

    复制构造函数而不是赋值运算符被调用

  7. 7

    外部C结构的C ++默认复制/移动赋值运算符不是const

  8. 8

    C中的赋值运算符重载

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

    C ++:使用运算符=调用多参数构造函数

  16. 16

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

  17. 17

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

  18. 18

    C ++:运算符new和default构造函数

  19. 19

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

  20. 20

    C ++复制赋值运算符类

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档