我正在使用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";
}
}
答案 0 :(得分:1)
它设置failbit,因为标准需要它。 (我现在感到愚蠢。我以为我可能做错了。)2014年11月草案第27.7.3.6.3.9节说:
如果函数不插入任何字符,则调用setstate(failbit)(可能会抛出ios_base :: failure(27.5.5.4))。
为什么委员会决定使这种行为与其他序列插入不同(如char *和string)不考虑插入什么都不是失败仍然是个谜。但我现在知道这并不是表示误用对象的失败。