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没有理解,是我功底不够的缘故吧...
开学了,人多了起来,继续静静的学习