2013-03-18 85 views
3

爲什麼重載任何類的>>操作符的標準方式返回istream(或任何輸入流)類型的對象的標準方式有沒有什麼好的理由。返回類型的超載>>

例如,由於這一點,類似的代碼

y = (cin >> x) ; 

將不起作用,那就得,如果超載>>有輸入對象的返回類型。

回答

0

因爲然後類似 cin >> x >> y 將無法​​正常工作。這比以前的例子更經常使用。

2

例如,由於這一點,類似的代碼

(cin >> x) = y;

將無法​​正常工作。如果超載>>將返回類型爲 的輸入對象。

不,它不一定會 - 在很多情況下,您會看到error: lvalue required as left operand of assignment,除非您返回參考。 (click here for a demonstration

一般的原因是它允許鏈接,例如,做這樣的事情

mystream >> a >> b >> c; 

對於輸入/輸出流,也有附加的好處,即流可以被轉換爲void*(C++ 03)或bool(C++ 11),這允許檢查錯誤在構建體如

while (cin >> x) { ... } 
0

在極少數情況下,(cin >> x) = y;將永遠是所期望的。它的預計左邊的變量是被返回的那個。例如:(x += 5) = 7,返回'x',然後設置爲7 - '5'不是返回的內容。所以(cin >> x)的預期結果是'cin'被返回,它允許執行operator chaining。在你的:'(cin >> x)= y;'中,讀取它的預期方式是「cin >> x」,然後是「cin = 7」。這沒有多大意義。返回別的東西,只是混淆了程序員閱讀你的代碼,因爲他們的期望沒有得到滿足。 (見Principle of least astonishment

這並不意味着'xy'總是需要返回一個引用到左邊。通常情況下,它可能會更有意義的返回別的東西。例如,'myInt >> 4'返回'myInt'的副本向右移4位。

+0

謝謝,我改變了我的例子(cin >> x)= y – user929404 2013-03-18 17:26:03

相關問題