我试图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 ++一起使用: