为什么流插入空的streambuf会失败?

时间:2015-08-13 18:15:48

标签: c++ iostream

我正在使用simple file-slurp,我决定添加一些错误检查。我很惊讶空文件出错。每个空序列都不会发生这种情况,""工作良好。我还验证了rdbuf()返回一个非空指针。

#include <iostream>
#include <sstream>
using namespace std;

int main(int, char**){
    istringstream in(""); // Succeeds if non-empty
    stringstream sstr;
    if (sstr << in.rdbuf()) { // Succeeds if I replace in.rdbuf() with ""
        cout << "Read Successful\n";
    }else{
        cout << "Read Failed\n";
    }
}

1 个答案:

答案 0 :(得分:1)

它设置failbit,因为标准需要它。 (我现在感到愚蠢。我以为我可能做错了。)2014年11月草案第27.7.3.6.3.9节说:

  

如果函数不插入任何字符,则调用setstate(failbit)(可能会抛出ios_base :: failure(27.5.5.4))。

为什么委员会决定使这种行为与其他序列插入不同(如char *和string)不考虑插入什么都不是失败仍然是个谜。但我现在知道这并不是表示误用对象的失败。