繁体   English   中英

C ++ iostream运算符覆盖了函数的返回类型

[英]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等)接收它。但是,对于ostreamistream ,返回的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM