当写入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