重载<<< C ++中的运算符 - 为什么返回类型是引用std :: ostream&

时间:2018-03-18 13:53:13

标签: c++ operator-overloading

我正在阅读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;
} 

1 个答案:

答案 0 :(得分:0)

在C ++中,当您执行以下操作时会复制对象:

  1. 使用=
  2. 定义变量
  3. 将其作为参数传递给非引用类型
  4. 的参数
  5. 从返回类型为非引用的函数返回
  6. 使用大括号
  7. 初始化数组或聚合类

    在第3种情况下,如果返回类型为std::ostream,则会复制“out”。所以它应该是std::ostream&。 (您可能会注意到第一个参数的类型也是std::ostream&,避免复制)