我还处于C ++基本格式和命令的学习阶段。
我现在在类操作符函数重载时来到<<
和>>
。我的问题是:当它们在朋友的功能中定义时,如下所示:
ostream &operator << ( ostream &output, const PhoneNumber &number )
并使用PhoneNumber类phone
调用,如下所示:
cout << phone << endl;
为什么朋友的功能会返回ostream&
?我的意思是当函数返回特定类型的值时,它通常由基本类型变量接收,例如bool,int,char,string等。但是,对于ostream
和istream
,返回的ostream&
类型未保存。然后,在这种情况下,它不应该是无效的(执行任务并终止而不返回任何值)?
答案 0 :(得分:1)
因为否则您可以将呼叫链接到operator<<
。这样:
cout << phone << endl;
被解析为:
(cout << phone) << endl;
并解析为:
operator<<(cout, phone).operator<<(endl);
首先调用operator<<(cout, phone)
,然后返回cout
,然后允许第二个<<
调用cout.operator<<(endl)
。
如果operator<<
返回,例如void
,第二个<<
将尝试调用无法编译的operator<<(void, endl)
。
答案 1 :(得分:0)
&#34;为什么朋友的功能会返回
ostream&
?&#34;
使这部分调用链正常工作
phone << endl;
ostream&
引用通过所有这些函数调用传递,因此可以在结果上再次调用operator<<()
函数。
答案 2 :(得分:0)
为什么朋友的功能会返回ostream&amp;?
允许操作员链接在一起。运算符返回对传入的相同流的引用。如果没有该返回引用,您将无法在<< endl
的返回值上调用cout << phone
。
我的意思是当函数返回特定类型的值时,它通常由基本类型变量接收,例如bool,int,char,string等。
这是可选的。返回值是临时的,如果未将其赋值给变量以延长其生命周期,则该语句将超出语句末尾的范围。
然而,对于ostream和istream,返回类型的ostream&amp;没有得救。
不一定是这样。如果尚未达到最终的;
,它必须保持足够长的时间才能调用下一个运算符。
然后,在这种情况下,它不应该是无效的(执行任务并终止而不返回任何值)?
没有