为什么 return 类型引用输出流?

Why is the return type reference to output stream?

我是 C++ 新手,正在学习运算符重载。现在在下面的代码中,除了对 为什么 return 类型是对输出流的引用?

有点困惑之外,我得到了所有内容

我们有以下枚举。

enum days{ SON, SAT, MON, TUE, WED, THRUS, FRI };

并且我们正在重载 << 运算符,以打印日期而不是数值 0、1、2 ... 等等。

密码是:

ostream& operator <<(ostream &,const days &d)
{
 switch(d)
 {
  case SUN: out << "SUN"; break;
  case MON: out << "MON"; break;
  case TUE: out << "TUE"; break;
  case WED: out << "WED"; break;
  .....
  ... 
 }
 return out;
} 

why the return type is reference to output stream?

返回 ostream& 可以链接它,比如

std::cout << SON << SAT << MON << TUE << WED << THRUS << FRI;

顺便说一句:Output stream 不应该(也不能)被复制,所以 return 类型是引用(而不是按值)。

ostream class 为许多类型的数据重载了插入运算符 (<<);整数、字符、字符*、字符串...

  • 此运算符的 return 类型是对 ostream 对象的引用,因此当您调用它时;您可以使用 return 类型来打印其他内容,而 return 类型的打印此内容是对 ostream 对象的引用,您可以使用它来打印其他内容等等...

  • 当你写:

    cout << 1 << "Hello" << 2.7 << endl;
    

在开头 cout 打印 1 并且 returns 我们使用它来打印 "Hello"(调用 <<(ostream&, char*))和 returns 的 ostream 对象又是对 ostream 对象的引用,所以我们用它来打印 2.7 等等...

  • 上面这行可以翻译为:

    (((cout << 1) << "Hello") << 2.7) << endl;