cpp重载了移位运算,使它成为系统类的一个运算符。而cpp中运算符在我的理解里就是函数,所以>> 和 << 都成了系统类cout,和 cin 的成员函数。
所以:
cout<<var
就等价于:
cout.operator<<(var)
我们看到cin对象是istream类型的,cout 是ostream类型。而istream和ostream分别是:
typedef basic_istream<char, char_traits<char> > istream;
typedef basic_ostream<char, char_traits<char> > ostream;
我们再往下翻,就能找到在basic_istream 和 basic_ostream 中对>>和<< 的重载。
所以:
cout<<boolalpha<<a<<endl;
应该可以理解为:
cout<<(boolalpha<<(a<<(endl)))
当然这只是一中理解而已。
boolalpha是一个函数,入参和返回值都是ios_base的引用。
但是boolalpha的入参数是哪个?