<<操作符的这些重载有什么区别

时间:2018-12-20 15:21:24

标签: c++

所以我想澄清一下打印操作符<<

的重载

现在这是我学会的方法:

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)却起作用了

1 个答案:

答案 0 :(得分:0)

v1 * 2将返回一个临时值,因为非常量左值引用不会绑定到临时对象,所以不能使用第二个重载。

第三个重载用于复制v1 * 2返回的值