输出操作符(<<)的左操作数必须是ostream对象,右操作数是要输出的值。操作符将其右操作数写到左操作数的ostream对象。

endl是一个特殊值,称为操纵符(manipulator),将它写入输出流时,具有输出换行的效果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到流中的输出。除此之外,C++还提供了另外两个类似的操纵符,第一个是flush,用于刷新流,但不在输出中添加任何字符。第二个是ends,这个操纵符在缓冲区中插入空字符NULL,然后刷新它。

cout<<'a'<
<<'b'<
<<'a'<
<<'b'<

输出操作符重载:

为了与IO标准库一致,操作符应该接受ostream&作为第一个形参,对类类型对象的引用作为第二个形参,并返回ostream &。我们只能将重载函数作为友元函数或普通函数,而不能将其定义为成员函数。

class Complex{  public:  .........  friend ostream& operator<<(ostream&,Complex&);  private:    double real;  double p_w_picpath;}ostream& operator<<(ostream& output, Complex& c){   output<<"("<
<<"+"<
<<"i)"<
<
<
<

因为C++不允许对标准库类型进行复制或赋值操作,所以重载函数的第一个形参必须是对ostream对象的引用,即形参与实参共享同一段存储空间。return output就是return cout,将输出流cout的现状返回,即保留了输出流的现状。执行cout<<c3得到的结果就是具有新内容的流对象cout,因此,(cout<<c3)<<c2相当于cout(新值)<<c2。