c++中重载输出流对象,为啥要返回引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中重载输出流对象,为啥要返回引用相关的知识,希望对你有一定的参考价值。

解释提问者的问题,问题不在于你返回的对象还是对象的引用,问题处在你定义的方法的返回值类型不对,这是有要求的,那么在哪里要求的呢,现做如下说明供参考。
流运算符重载的方法,是在流中使用模版方法template定义的,如下
template<class _Elem,
class _Traits> inline
basic_ostream<_Elem, _Traits>& __CLRCALL_OR_CDECL operator<<(
basic_ostream<_Elem, _Traits>& _Ostr, const char *_Val){}
注意模版方法定义的返回值类型为一个流泛型对象的引用,因此你定义的不对。至于你返回的是对象还是对象的引用不会导致错误。
(如果楼主不理解模版,可以简单的认为,模版就是个样例,它定义好了,我们必须按照他定义的方式去实现。如果学习C++的话,模版必学,个人建议仅供参考)
参考技术A

这样返回的流对象可以继续使用,如

cout << ml1 << \' \' << ml2;


追问

返回值后添加引用就没有错了,这是为什么?

以上是关于c++中重载输出流对象,为啥要返回引用的主要内容,如果未能解决你的问题,请参考以下文章

c++中为啥赋值运算符重载返回类型是引用

C++重载输出操作符<<,为什么要返回引用

为啥赋值运算符要返回对对象的引用?

C++里面,为啥重载前++时不返回引用就不能连用?

c++中为啥要函数返回引用?

为啥我们在赋值运算符重载中使用引用返回而不是在加减运算中?