while(cin)的理解

Jery最早的意图是支持一个iostream class object的纯量测试,像这样:

if ( cin )...

为了让cin能够求得一个真假值,Jerry首先为它定义一个conversion运算符,即operator int()。在良好行为如上者,确实 可以正确运行。但是在下面这种错误程序设计中,它的行为就会令人不解:

cin<<intVal;

程序员要的应该是cout而不是cin。class层次结构的"type-safe"天性应该能够捕捉这类输出运算符的错误运用。然而,编译器可能这样做:

 int temp = cin.operator int();

temp << intVal;

这不是我们想要的。

如何解决这个行为?Jerry想到以operator void *()取代operator int()。

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

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

while (std::cin)
{

...

}
控制结构中的布尔条件值并不是非得直接转换为bool不可,只要能够转换为某个整数型别指针型别就够了。


如果用cin读取一个整型量而输入的却是个字符, cin就会设置一个failbit来表示失效位, operator void* 在流状态正常时返回1, operator !返回0。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值