[英]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.