爲什麼重載任何類的>>操作符的標準方式返回istream(或任何輸入流)類型的對象的標準方式有沒有什麼好的理由。返回類型的超載>>
例如,由於這一點,類似的代碼
y = (cin >> x) ;
將不起作用,那就得,如果超載>>
有輸入對象的返回類型。
爲什麼重載任何類的>>操作符的標準方式返回istream(或任何輸入流)類型的對象的標準方式有沒有什麼好的理由。返回類型的超載>>
例如,由於這一點,類似的代碼
y = (cin >> x) ;
將不起作用,那就得,如果超載>>
有輸入對象的返回類型。
因爲然後類似 cin >> x >> y 將無法正常工作。這比以前的例子更經常使用。
例如,由於這一點,類似的代碼
(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) { ... }
在極少數情況下,(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位。
謝謝,我改變了我的例子(cin >> x)= y – user929404 2013-03-18 17:26:03