[英]C++ iostream operator overladed function return type
我仍处于C ++基本格式和命令的学习阶段。 我现在在类运算符函数重载,并来到<<
和>>
。 我的问题是:在如下所示的朋友函数中定义它们时:
ostream &operator << ( ostream &output, const PhoneNumber &number )
并通过PhoneNumber类phone
进行调用,如下所示:
cout << phone << endl;
为什么好友函数返回ostream&
? 我的意思是,当函数返回特定类型的值时,通常由基本类型变量(例如bool,int,char,string等)接收它。但是,对于ostream
和istream
,返回的ostream&
类型不是保存。 然后,在这种情况下,它是否应该无效(执行任务并终止而不返回任何值)?
因为否则您可以将调用链接到operator<<
。 这个:
cout << phone << endl;
解析为:
(cout << phone) << endl;
并解析为:
operator<<(cout, phone).operator<<(endl);
因此,它首先调用operator<<(cout, phone)
,后者返回cout
,然后允许第二个<<
调用cout.operator<<(endl)
。
如果operator<<
返回,例如void
,第二个<<
将尝试调用不会编译的operator<<(void, endl)
。
“为什么朋友函数返回
ostream&
?”
使呼叫链的这一部分起作用
phone << endl;
ostream&
引用通过所有这些函数调用传递,因此可以在结果上再次调用operator<<()
函数。
为什么朋友函数返回ostream&?
允许将操作员链接在一起。 运算符将引用返回给传入的同一流。没有该引用,您将无法在cout << phone
的返回值上调用<< endl
。
我的意思是,当函数返回特定类型的值时,通常由基本类型变量(例如bool,int,char,string等)接收它。
那是可选的。 如果未将返回值分配给变量以延长其寿命,则返回值是临时的,并且超出了语句结尾的范围。
但是,对于ostream和istream,不会保存返回的ostream&类型。
不一定是。 它仅需保留足够长的时间,以便下一个操作员(如果是最终操作员)可以被调用;
尚未达到。
然后,在这种情况下,它是否应该无效(执行任务并终止而不返回任何值)?
没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.