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

0 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

std::string:

std::string a("This is an example.");
std::cout << a;
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 6

传统的做法是返回ostream过载时的引用<<,以允许链接.这个:

s << a << b;
Run Code Online (Sandbox Code Playgroud)

相当于函数调用

operator<<(operator<<(s,a),b);
Run Code Online (Sandbox Code Playgroud)

并且只能工作,因为内部调用返回一个合适的类型作为外部调用的参数.

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

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

或者从其他一些重载返回:

std::ostream & operator<<(std::ostream & s, thing const & t) {
    return s << t.whatever();
}
Run Code Online (Sandbox Code Playgroud)