关于while(cin)

http://hi.baidu.com/zyb_debug/blog/item/cdfc2adf9b982451cdbf1a7e.html
streams定义了两个可用于布尔表达式的函数

operator void*()   意义:stream是否出错(相当于!fail())
operator !()       意义:stream是否已出错(相当于fail())

我们可以运用operator void*()在控制结构中简洁测出stream的当前状态:

while (std::cin)
{
}
控制结构中的布尔条件值并不是非得直接转换为bool不可,只要能够转换为某个整数型别或指针型别就够了。
转换为void* 常常是为了在同一表达式中读入对象并测试是否成功:

if(std::cin>> x)
{
//reading x was successful
}
正如先前的讨论,表达式
std::cin >> x
会返回cin,所以读入x后,上述语句变为
if(std::cin)
{
}

此时的cin被用于条件判断,所以cin会调用 operator void*,返回"stream是否发生错误"

以上技术的几个典型应用就是以循环读入对象并处理
while(std::cin >> obj)
{
std:: cout << obj << std::endl;
}

如果failbit或badbit被设立,该循环就立即中止---出现错误或者读到(end-of-file).

我们可以利用operator!进行相反测试,它会返回"strean是否已发生错误",也就是说如果failbit 或badbit被设立就会返回true用法如下:
if(!std::cin)
{
//the stream is not OK
}

上述文字出于 <<c++标准程序库-自修教程与参考手册->>p600 侯捷-孟岩译

花了几天时间终于将这本书阅读完了,里面的streambuf没有理解,是我功底不够的缘故吧...
开学了,人多了起来,继续静静的学习

Posted on 2009-09-06 14:38 zyb_debug 阅读(1805) 评论(3)   编辑  收藏 引用

你可能感兴趣的:(关于while(cin))