问一个io流的问题

mul 2006-05-24 09:49:03
在vc71自带的io流实现的<istream>中,从648行起,basic_istream::read的实现
_Myt& read(_Elem *_Str, streamsize _Count)
{ // read up to _Count characters into buffer
ios_base::iostate _State = ios_base::goodbit;
_Chcount = 0;
const sentry _Ok(*this, true);

if (_Ok)
{ // state okay, use facet to extract
_TRY_IO_BEGIN
const streamsize _Num = _Myios::rdbuf()->sgetn(_Str, _Count);
_Chcount += _Num;
if (_Num != _Count)
_State |= ios_base::eofbit | ios_base::failbit; // short read
_CATCH_IO_END
}

_Myios::setstate(_State);
return (*this);
}
如果_Myios::rdbuf()->sgetn(_Str, _Count)抛出异常,会被_TRY_IO_BEGIN,_CATCH_IO_END catch住(默认行为,定义_HAS_EXCEPTIONS),然后将state置为badbit,然后跳到语句:_Myios::setstate(_State);但是这里的_State却是goodbit,又把流状态置为正常了。
调用者岂不是用stream.good()也没办法正确判断流状态?
难道我一定要在我的实现(streambuf继承)里将异常捕获返回错误(eof)才能适合这种read方法?
...全文
232 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mul 2006-05-24
  • 打赏
  • 举报
回复
等待中......
mul 2006-05-24
  • 打赏
  • 举报
回复
每人回答吗。。。

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧