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.