C++ 为什么设置了failbit()?

C++ 为什么设置了failbit()?,c++,istream,C++,Istream,创建一个文件并用零填充: dd if=/dev/zero of=/tmp/zeroes count=1 编写这个小程序来提取它在文件中遇到的第一个无符号整数 #include <assert.h> #include <fstream> int main() { std::ifstream reader( "/tmp/zeroes", std::ios_base::binary ); uint32_t number; reader >>

创建一个文件并用零填充:

dd if=/dev/zero of=/tmp/zeroes count=1
编写这个小程序来提取它在文件中遇到的第一个无符号整数

#include <assert.h>
#include <fstream>

int main()
{
    std::ifstream reader( "/tmp/zeroes", std::ios_base::binary );
    uint32_t number;
    reader >> number;

    assert( !reader.fail() );
}
#包括
#包括
int main()
{
std::ifstream读取器(“/tmp/zeroes”,std::ios_base::binary);
uint32_t编号;
阅读器>>编号;
断言(!reader.fail());
}

为什么会触发断言?

因为
/dev/zero
传递的是二进制零,而不是字符
'0'
执行(或尝试执行)从文本的转换。

即使将流模式设置为二进制,
到整数类型也是一个格式化的输入函数(使用
num\u get
,需要文本表示)。