65,194
社区成员




ostream & operator<<(ostream &cout, person &p)//本质 operator<<(cout,p) 简化 cout<<p
{
cout << "m_A=" << p.m_A << " m_B=" << p.m_B;
return cout;
}
返回cout为什么前面要用ostream & operator,而且&和operator之间还有空格
在C++中,这段代码定义了一个重载的输出运算符 <<
,用于将 person
类型的对象输出到输出流 cout
。
ostream&
表示该函数返回值的类型是一个指向 ostream
对象的引用,即输出流对象的引用。这样做是为了实现函数链式调用,将输出流对象传递给下一个输出操作符。
operator<<
是一个重载的运算符函数,表示对输出运算符进行重载。
在这段代码中,operator<<
函数接受两个参数:ostream
类型的对象 cout
和 person
类型的对象 p
。函数内部则使用 cout
对象来输出 p
对象的成员变量。
至于为什么要在 operator
和 <<
之间留有空格,这是一种编码风格的选择,遵循了一些常见的 C++ 标准库函数的命名约定。这种风格使代码更易读且符合一致性,但在语法上并不是强制要求。实际上,在这个地方加上空格或者去掉空格都不会影响代码的功能。
而且代码写错了你这样会报错的cout是iostream标准库里的,你可以写成out,用out对象输出p对象的内容,返回也是out对象
返回类型如果不是ostream &,并且return cout不返回cout,则有可能构造一个新的ostream对象,即可能与原始cout不同的新对象。这样对于你的连续输出“cout<<p1<<p2”,理论上p1和p2可能定向到不同的设备,这才是问题的实质。要学好C++,建议使用华中科技大学出版的介绍C++2023最新国际标准的教材《C++程序设计实践教程》(新国标微课版),参见https://www.zhihu.com/question/610987898/answer/3108746910?utm_psn=1695443968811302912