什么时候应该返回std :: ostream?

时间:2014-01-14 15:02:38

标签: c++ std ostream

每次我要创建像std::ostream运算符这样的运算符来显示值(无运算符)时,我都会返回std::string,但我不知道为什么。如果std::ofstream用作函数成员运算符函数(std::cout),我该如何返回它,何时应该返回它以及为什么?

示例:

class MyClass
{
   int val;
   std::ostream& operator<<(const std::ostream& os, const MyClass variable)
  {
      os << variable.val;
  }
}

std::string

std::string a("This is an example.");
std::cout << a;

1 个答案:

答案 0 :(得分:6)

通常在重载ostream时返回对<<的引用,以允许链接。这样:

s << a << b;

相当于函数调用

operator<<(operator<<(s,a),b);

并且仅有效,因为内部调用返回一个合适的类型作为外部调用的参数。

要实现这一点,只需通过引用获取stream参数,并直接通过引用返回相同的流:

std::ostream & operator<<(std::ostream & s, thing const & t) {
    // stream something from `t` into `s`
    return s;
}

或从其他一些重载返回:

std::ostream & operator<<(std::ostream & s, thing const & t) {
    return s << t.whatever();
}