为什么返回类型引用输出流

Why is the return type reference to output stream?

本文关键字:输出流 引用 返回类型 为什么      更新时间:2023-10-16

我是c++新手,正在学习操作符重载。现在在下面的代码中,我得到了一切,除了有点困惑的为什么返回类型是对输出流的引用?

有以下enum:

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;
} 

为什么返回类型是对输出流的引用?

返回ostream&使其可以链化,如

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

BTW:输出流不应该(也不能)被复制,所以返回类型是引用(而不是按值)。

ostream类为多种类型的数据重载了插入操作符(<<);Int, char, char*, string…

  • 这个操作符的返回类型是一个ostream对象的引用,所以当你调用它时;你可以使用返回类型来打印其他内容打印这些内容的返回类型是对ostream对象的引用你可以用它来打印其他内容等等。

  • 当你写:

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

开头的cout输出1并返回一个ostream对象,我们用它来输出"Hello"(调用<<(ostream&, char*)),并返回对ostream对象的引用,所以我们用它来输出2.7等等…

  • 上面这行可以翻译为:

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