C++ C+简介+;IO流

C++ C+简介+;IO流,c++,casting,operator-overloading,iostream,C++,Casting,Operator Overloading,Iostream,我从中得到了一段代码,我不知道它是如何工作的?该片段开头说: 您可以通过测试读取的结果来检测特定的读取或写入操作失败。例如,要检查是否从用户处读取了有效整数,可以执行以下操作: intx; 如果(cin>>x) { cout x操作返回对cin的引用,但我仍然不清楚如何评估对标准输入流对象的引用,从而允许您检查输入是否为有效整数。cin是istream模板类的一个实例。操作符>对该istream实例执行操作,将输入加载到da中然后在while条件下,通过调用调用cin::operator voi

我从中得到了一段代码,我不知道它是如何工作的?该片段开头说:

您可以通过测试读取的结果来检测特定的读取或写入操作失败。例如,要检查是否从用户处读取了有效整数,可以执行以下操作:

intx;
如果(cin>>x)
{

cout x操作返回对cin的引用,但我仍然不清楚如何评估对标准输入流对象的引用,从而允许您检查输入是否为有效整数。

cin
istream
模板类的一个实例。
操作符>
对该istream实例执行操作,将输入加载到da中然后在
while
条件下,通过调用调用
cin::operator void*()const
C++11中的显式运算符bool()const
)来测试它
用于测试操作是否成功的函数。这就是为什么可以在while条件下使用此操作的原因

while ( cin >> x)
{
   //...

根据文档(),操作员

explicit operator std::ios::bool() const;
“返回是否设置了错误标志(failbit或badbit)。”和“如果至少设置了其中一个错误标志,则函数返回false,否则返回true。”


因此,当
if
语句将
cin
流强制转换为
bool
时,如果流设置了错误标志,则该运算符返回
false
,否则返回
true

这可能是因为我不确定代码是否实现了它所声称的功能。
if
条件是否为否定?是否为?@DavidRodRiguez dribeas是的,应该是。这是文章作者的错误。正如@David Rodríguez所指出的,源文章的逻辑颠倒了。你可以自己仔细检查文档和/或实验!
explicit operator std::ios::bool() const;