【问题标题】:c++ is it safe to unget on fstreamsc++ 在 fstreams 上是否安全
【发布时间】:2014-03-30 11:56:53
【问题描述】:

假设input.txt是1字节的文本文件:

std::ifstream fin("input.txt", std::ios::in);
fin.get();              // 1st byte extracted
fin.get();              // try to extract 2nd byte
std::cout << fin.eof(); // eof is triggered
fin.unget();            // return back
std::cout << fin.eof(); // eof is now reset
fin.get();              // try to extract 2nd byte, eof assumed
std::cout << fin.eof(); // no eof is triggered

似乎unget() 打破了eof 标志触发也打破了文件指针。我做错了吗?

【问题讨论】:

    标签: c++ iostream fstream


    【解决方案1】:

    eof 未设置,但good 也未设置。流忽略操作,因为它处于故障模式。

    我不记得在 EOF 之后 unget 应该做什么,但如果我使用 clear 允许重试,unget 会立即返回失败。

    http://ideone.com/JkDrwG

    通常最好使用自己的缓冲区。回退是一种技巧。

    【讨论】:

    • unget: > 构造一个哨兵对象后,如果!good()调用可能抛出异常的setstate(failbit),并返回。
    • @user657267 是的,但我的意思是在 clear 从 EOF 状态之后,这是链接的 IDEone 实验所做的。
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多