参数为引用,不为值传递是为了防止拷贝构造函数的无限递归,最终导致栈溢出。
如果复制构造函数是这样的 :
test(test t);
我们调用
test ort;
test a(ort); --> test.a(test t=ort)==test.a(test t(ort))
-->test.a(test t(test t = ort))
==test.a(test t(test t(ort)))
-->test.a(test t(test t(test t=ort)))
- ...
就这样会一直无限递归下去。
而运算符=的重载函数参数不一定为引用,但若为引用则可减少一次复制构造函数的调用,有利于提高效率,因此建议运算符=重载函数的参数也为引用。