所以我想澄清一下重载打印运算符 <<
现在这就是我学会的方法:
1) ostream& 运算符<<(ostream& os, const Vector& v1)
在这个例子中,我们有一些包含 3 个整数的 Vector 类。
我看到有人尝试这样做:
2) ostream& 运算符<<(ostream& os, Vector& v1)
所以区别在于 v1 只是一个引用而不是一个常量引用。然后编译器无法打印任何不是左值的 Vector 对象,例如,他还重载了 * 运算符,以便能够执行诸如 v1 * 2、简单向量乘以标量之类的操作。例如 :
std::cout << v1 << std::end - 这有效(v1 是一个向量)std::cout << v1 * 2 << std::end - 这不起作用
但是,当我们将签名更改为按值时:
3) ostream& operator<<(ostream& os, Vector v1)
他的印刷品能够工作……我想知道为什么这一切会发生?
为什么编译器无法识别 v1 * 2 的重载 (2) 但为什么按值将其发送到 (3) 确实有效
v1 * 2
将返回一个临时对象,不能使用第二个重载,因为非常量左值引用不绑定到临时对象。
第三个重载用于复制由 v1 * 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句