C ++ iostream运算符重叠函数返回类型

时间:2015-03-30 04:11:46

标签: c++ return operator-overloading iostream

我还处于C ++基本格式和命令的学习阶段。 我现在在类操作符函数重载时来到<<>>。我的问题是:当它们在朋友的功能中定义时,如下所示:

ostream &operator << ( ostream &output, const PhoneNumber &number )

并使用PhoneNumber类phone调用,如下所示:

cout << phone << endl;

为什么朋友的功能会返回ostream&?我的意思是当函数返回特定类型的值时,它通常由基本类型变量接收,例如bool,int,char,string等。但是,对于ostreamistream,返回的ostream&类型未保存。然后,在这种情况下,它不应该是无效的(执行任务并终止而不返回任何值)?

3 个答案:

答案 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;没有得救。

不一定是这样。如果尚未达到最终的;,它必须保持足够长的时间才能调用下一个运算符。

  

然后,在这种情况下,它不应该是无效的(执行任务并终止而不返回任何值)?

没有