【问题标题】:What is cin doing inside argument of if? [duplicate]cin 在 if 的参数中做了什么? [复制]
【发布时间】:2011-04-17 17:33:50
【问题描述】:

可能重复:
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";
     }
 }

我们在这段代码中没有收到错误。但是 Alwaysif 语句有效 为什么?怎么样?

【问题讨论】:

  • 它像任何其他表达式一样被评估,显然是一个非零值。
  • void main() 已弃用,它应该是 int main()。在第一次使用cincout 之前,您需要using std::cout; using std::cin;using namespace std;
  • 我用turbo-c++编译了这个
  • 这不适合我。还有很多其他警告(例如使用 iostream.h)表明您可能正在使用古老的编译器。

标签: c++ if-statement


【解决方案1】:

cin &gt;&gt; 2 无效。 cin &gt;&gt; integervar 是有效的,假设这就是你的意思吗?

标准库类iosbasic_istream(因此cin)从重载operator void *(和operator!)继承,以允许您进行此类测试。

如果设置了failbitbadbitoperator void * 返回 0 - 也就是最后一次提取失败。

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

【讨论】:

    【解决方案2】:
    if(cin>>2) 
    

    这甚至无法编译。看到这个:http://ideone.com/MiEkq

    你的意思可能是:if(cin&gt;&gt;var)

    如果是这样,则表示如果从输入流中读取成功,则将执行if块,因为读取成功后,返回的std::istream &amp;可以隐式转换为true,否则转换进入false

    顺便说一句,main() 的返回类型应该是int

    【讨论】:

    • @Nawaz 它使用 turbo-c++ 编译
    • @Suhail Gupta:那么你应该得到一个更好的编译器——如果你实际上使用cin &gt;&gt; 2编译器坏了。
    • @Erik compiler's broken 是什么意思?
    • @Suhail:也就是说,Turbo-C++ 不遵循语言规范。它编译的不是 C++。 ...只需单击此链接并查看错误:ideone.com/MiEkq
    • @Suhail Gupta::What is wrong with using turbo C?-->stackoverflow.com/questions/3920351/…
    猜你喜欢
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2021-09-17
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多