2010-11-14 54 views
3

通过加速读取C++,他们举了一个我不明白的例子。这是一个while循环(cin >> x)。在脚本中的这一点上,x已被声明为double。我明白,只要x成功接收输入,循环就会执行,但是>>返回一个布尔值?我想我只需要一点帮助,了解它是什么>> < < do ....另外,虽然我们在这个问题上,iostream,ios和iomanip之间的区别是什么输入操作数返回布尔值在c + +?

+1

你应该把它分成两个问题。问题标题中描述的第一部分是一个问题,但'我们谈论这个问题'之后的所有事情都是一个不同的问题,因此应该是一个不同的问题。 – SingleNegationElimination 2010-11-14 07:02:40

回答

8

实际上,他们回报自己,即,

std::cin >> foo 

是恰好返回std::cin表达式(具有副作用)。它也发生iostream s可以转换为bool,如果他们准备好接收输入,或者有输出提供,他们是真的,如果他们关闭或在其各自的文件的末尾,它们是假的。

+1

更确切地说,它们被转换为'void *',然后转换为'bool'。即使有*输入可用,流也可能评估为“假”。例如,如果'foo'是一个'int',并且下一个要提取的字符不是数字,那么该流将处于'fail'状态。调用'清除'重置。 – 2010-11-14 07:21:10