簡體   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