作者:赤血-魔鬼 | 来源:互联网 | 2023-01-19 19:54
我最近了解到,人们可以选择加入iostreams的异常.为了不必手动检查文件是否打开我尝试了,并遇到这种行为:
#include
#include
#include
#include
#include
void test(std::istream& is, bool exceptions) {
try {
if (exceptions)
is.exceptions(std::istream::failbit);
std::vector input;
std::copy(std::istream_iterator{is}, {}, std::back_inserter(input));
for (auto x : input) {
std::cout <
当异常被设置时,这可以正常工作.但是,当我使用异常时,我会抛出一个basic_ios::clear
,我想不出原因.
basic_ios::clear
未列出可failbit
根据cppreference设置的函数.
提前致谢.
编辑:下面的答案已经回答了为什么会这样.我现在的另一个问题是如何避免这种例外?我的第二次尝试是std::copy
通过这个循环替换:
for (int n; is >> n;) {
input.push_back(n);
}
产生了同样的例外.或者这种行为是否有意?
注意: clang不显示此行为.