所以我想澄清一下打印操作符<<
的重载现在这是我学会的方法:
1) ostream&运算符<<(ostream&os,const Vector&v1)
在此示例中,我们有一些Vector类,其中包含3个整数。
我看到有人尝试这样做:
2) ostream&运算符<<(ostream&os,Vector&v1)
所以区别是v1只是一个引用,而不是const引用。然后,编译器无法打印不是Lvalues的任何Vector对象,例如,他还重载了*运算符,使其能够执行v1 * 2之类的操作,简单矢量乘以标量。 例如:
std :: cout << v1 << std :: end -此功能有效(v1是向量) std :: cout << v1 * 2 << std :: end -这不起作用
但是,当我们将签名更改为按值时:
3) ostream&运算符<<(ostream&os,Vector v1)
他的打印能够工作...而我想知道为什么这一切都会发生?
为什么编译器无法识别v1 * 2的重载(2),但是为什么按值将重载发送给(3)却起作用了
答案 0 :(得分:0)
v1 * 2
将返回一个临时值,因为非常量左值引用不会绑定到临时对象,所以不能使用第二个重载。
第三个重载用于复制v1 * 2
返回的值