复制构造函数

0 c++ copy-constructor

复制构造函数的想法真让我困惑.我不明白为什么他们使用引用和为什么复制构造函数中的常量引用?

Dar*_*uuk 10

为什么使用引用:如果不使用引用,则必须创建要复制的对象的副本.这必须使用复制构造函数完成.在这里插入无限循环.

为什么是const引用:您希望保证您正在复制的对象没有被修改.

[编辑]正如DeadMG在他的评论中所述,您还希望引用是const这样的,您可以创建临时实例的副本.例如,假设你有:

class Matrix
{
  Matrix const operator+ (Matrix const & rhs) const;
  // Code & stuff
}
Run Code Online (Sandbox Code Playgroud)

您希望返回值为const,以便诸如以下的愚蠢内容引发编译器错误:

Matrix a, b, c;
(a + b) = c;
Run Code Online (Sandbox Code Playgroud)

现在显然这是一个愚蠢的陈述,但如果返回类型operator+不是const,它实际上是允许的.当然,在下一行,临时(a + b)将超出范围,你将无法使用它.

但是,如前所述,您希望能够使用临时实例创建实例:

Matrix a, b;
Matrix c(a + b);
Run Code Online (Sandbox Code Playgroud)

如果参数拷贝构造函数是不是const,那是不可能的,因为返回类型的operator+const.

  • 因此它可以接受对现有C++中临时对象的引用. (2认同)