當寫入cin >> a
時,實際上是使用該std::istream::operator>>
,根據參考here,該操作符返回一個istream&
對象引用,把右手可變(參照)作爲其參數。這就是你如何鏈接它:cin >> a >> b
。
看到這cin >> a >> b
鏈的另一種方式,當打破,正是這兩個步驟:
- 第一步,
cin >> a
返回一些中間值,讓我們說這是x
。 (實際上,你可以嘗試auto x = cin >> a
。
- 第二步,你在做
(cin >> a) >> b
,當我們用這個中間值x
,我們可以把它寫成x >> b
。
那麼,這到底是x
?x
這裏停留相同的位置爲cin
,它是istream&
類型的對象。
因此,當你談論true
或false
,你實際上是在談論這是否退還istream&
參考,請參考一個對象,無論是true
還是false
。當標準輸出捕捉到一個EOF符號時(例如當你在系統中輸入unix中的Ctrl-C時,或者當你讀到一個文件的末尾時),將會是false
。
您的代碼,因此,可以擴大爲
#include <iostream>
using namespace std;
int main()
{
int a, b;
auto x = cin >> a >> b
while (x)
{
cout << a << b << "\n";
}
}
如果您正在使用像Visual Studio的IDE,你可以在變量x
點您的鼠標,它會提示你x
的類型,那將是一個istream&
。
另外,由於Bob__,這istream&
類可以是轉換爲ios::operator bool
類,如被寫入here,無論是true
或false
表示此stream
,它therfore的狀態(ios_base::iostate
)
可以使用返回流引用的流和函數作爲循環條件,從而產生慣用的C++輸入循環,如while(stream >> value) {...}
或while(getline(stream, string)){...}
。只有輸入操作成功時,這些循環纔會執行循環的主體。
爲了進一步理解,您應該閱讀教科書中的操作符(重載)章節。
你也許應該提到[operator bool](http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool)。 –
@Chazeon:更新後的答案非常具有說服力。謝謝。 :) – aps120797