【发布时间】:2013-03-27 12:30:39
【问题描述】:
我正在尝试使用std::istream 解析文件,并希望使用异常来简化错误处理。但是流永远不会在 eof 上抛出异常,即使它们已启用。
考虑以下 sn-p:
std::string line("Lorem ipsum");
std::istringstream is(line);
is.exceptions(std::ios::eofbit | std::ios::failbit);
std::string value1, value2, value3;
is >> value1;
std::cout << is.eof() << std::endl;
is >> value2;
std::cout << is.eof() << std::endl;
is >> value3;
std::cout << is.eof() << std::endl;
读取 value2 后,eof() 返回 true,但在任何时候都不会抛出异常,即使流被指示这样做(参见第 3 行)。最后,value3 包含一个空字符串。
我错过了什么?
以防万一:我使用的是 Xcode 4.6.1 中的 LLVM libc++(支持 C++11 的 LLVM C++)。
【问题讨论】:
-
在 Linux 上使用 g++ 为我工作
-
@parkydr:出于好奇:使用 g++ 的程序的输出是什么? value2 是否仍然读取而不抛出异常?
-
0 在抛出 'std::ios_base::failure' 实例后调用终止 what(): basic_ios::clear Aborted (core dumped)