我正在阅读tutorial关于在C ++中重载<<
运算符的问题。
我试图理解为什么返回类型是引用std::ostream&
?教程说
如果您尝试按值返回std :: ostream,则会出现编译错误。发生这种情况是因为std :: ostream特别禁止被复制。
有人可以解释一下std::ostream
被复制了吗?
std::ostream& operator<< (std::ostream &out, const Point &point)
{
// Since operator<< is a friend of the Point class, we can access Point's members directly.
out << "Point(" << point.m_x << ", " << point.m_y << ", " << point.m_z << ")";
return out;
}
答案 0 :(得分:0)
在C ++中,当您执行以下操作时会复制对象:
在第3种情况下,如果返回类型为std::ostream
,则会复制“out”。所以它应该是std::ostream&
。 (您可能会注意到第一个参数的类型也是std::ostream&
,避免复制)