小编den*_*nis的帖子

为什么复杂的<double>上的operator >>如果达到EOF则没有设置eofbit?

我试图std::complex<double>从文件(或任何std::istream)中尽可能多地阅读.如果操作失败,我检查ios :: eof().如果尚未设置,我认为解析数据时出错,我可以向用户报告输入文件有错误.这种方案适用于双重,但不知何故它在复数上失败.为什么?

以下是一些重现问题的代码:

std::istringstream istr("4 1.2");
std::complex<double> val;

while( istr >> val )
        std::cout << " val = " << val << std::endl;

std::cout << "flags: eof=" << istr.eof() << " fail=" << istr.fail() << " bad=" << istr.bad() << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出是

 val = (4,0)
 val = (1.2,0)
 flags: eof=0 fail=1 bad=0
Run Code Online (Sandbox Code Playgroud)

如果我更换std::complex<double>double,它按预期工作,产生

 val = 4
 val = 1.2
 flags: eof=1 fail=1 bad=0
Run Code Online (Sandbox Code Playgroud)

libstdc ++会出现此问题,但它似乎与libc ++一起使用:

使用g ++在coliru上运行

使用clang ++和libc ++在coliru上运行 …

c++ std istream complex-numbers eof

9
推荐指数
1
解决办法
161
查看次数

标签 统计

c++ ×1

complex-numbers ×1

eof ×1

istream ×1

std ×1