c – std :: basic_ifstream抛出std :: bad_cast

我试图使用下面的代码从文件中读取数据. (注意,您需要在GCC上启用C 11功能才能进行此编译.)

#include <fstream>

typedef unsigned char byte;

int main()
{
    std::string filename = "test.cpp";
    std::basic_ifstream<byte> in(filename, std::basic_ifstream<byte>::in | std::basic_ifstream<byte>::binary);
    in.exceptions(std::ios::failbit | std::ios::badbit);
    byte buf[5];
    in.read(buf, 5);
    return 0;
}

但是,在读取数据时,我得到一个例外:

terminate called after throwing an instance of 'std::bad_cast'
  what():  std::bad_cast

调用in.read(buf,5)命令时会发生这种情况.

我知道我可以通过不设置我设置的异常掩码来抑制此异常,但这不能解决问题,它只会掩盖它.如果没有异常掩码,代码将继续工作,但会读取0个字符.

有谁知道为什么抛出这个异常?我怎么让它消失?

解决方法:

c STL只包含char_traits的两个特化:

   struct char_traits < char >;
   struct char_traits <wchar_t >;

对于发布的代码,可以使用char_traits< byte>的定义是必须的.

更多细节在this SO question

上一篇:c – 重复输入的文件流


下一篇:c – ifstream.peek()到达文件末尾时的返回值