什么是cin在if的论证里面做什么?

时间:2011-04-17 17:33:51

标签: c++ if-statement

  

可能重复:
  How would std::ostringstream convert to bool?

#include<iostream.h>
 void main() {
   if(cin>>2) {    // what is cin>>2 doing inside arg of if
      cout<<"if works";
   } else {
       cout<<"else works";
     }
 }

我们在此代码中未收到错误。但始终if语句有效 为什么?如何?

2 个答案:

答案 0 :(得分:3)

cin >> 2无效。假设这是你的意思,cin >> integervar是有效的吗?

标准库类ios basic_istream(以及cin)继承自重载operator void *(和operator!)以允许您进行此类测试。

如果设置operator void *failbit

badbit将返回0 - 即最后一次提取失败。

如果提取成功,这是结合提取和检查的“标准”方式。

答案 1 :(得分:2)

if(cin>>2) 

这甚至都不会编译。请参阅:http://ideone.com/MiEkq

你的意思是:if(cin>>var)

如果是这样,则意味着如果输入流的读取成功,那么将执行if块,因为在成功读取之后,返回的std::istream &可以隐式转换为{{1 }},否则转换为true

顺便说一句,false的返回类型应为main()