是弦读读取失败非确定性的
Are stringstream read failures non-deterministic?
我的代码在不同的编译器上的行为不同:
std::string strVal = "11";
std::stringstream stream( strVal );
auto value = false;
if( !( stream >> std::noboolalpha >> value ) )
{
// report error - this path is taken on both compilers
}
// "value" is "false" here on in VS 2017, but "true" on GCC 4.6
是预期的行为差异,还是GCC中的错误?
根据cppprefence:
如果提取失败(例如,如果在预期数字的位置输入字母(,则值不过了,设置了失败。
但是,value
正在修改为GCC 4.6上的true
。
msvc错误。[facet.num.get.virtuals]/6:
效果:如果
(str.flags()&ios_base::boolalpha) == 0
然后输入 收益是long
的收益,但如果存储一个值 在val
中,该值是根据以下内容确定的:如果 要存储的值是0
,然后存储false
。如果值是1
,则true
存储。否则true
存储并且ios_base::failbit
是 分配给err
。
使用VC 19(又称VS2015(运行,您的示例代码显示value
是false
。
在GCC 8上回到4.4.7,带有任何-std=
标志,总是表明value
已更改为true。
在C 11中,它应该将值设置为True,但按照先前的标准,它应该使其保持不变,而T.C.笔记是标准本身的缺陷。因此,MSVC在C 11中是不合格的,而GCC在早期标准下是不合格的,但现在是一致的。
相关文章:
- 如何确定我已使用非编码文件到达 EOF?
- C++编译器中有哪些非确定性的例子?
- 如何在 Python C++ 混合库中调试非确定性分段错误?
- 哪些计算机支持非确定性random_device?
- 是弦读读取失败非确定性的
- 通过在迭代指针键映射上出错来捕获非确定性
- 是否有符合标准的方法来确定非静态杆件的对齐方式?
- 为什么这些直方图功能有所不同,为什么一个非确定性
- 如何确定具有文件路径的字符串中是否有任何非 ASCII 字符
- 如何确定图形是否具有非唯一的拓扑排序
- 为什么在const和非const方法中删除代码重复不是不确定的行为
- 不确定如何修复;非静态成员参考必须相对于特定对象
- 从方法非确定性行为返回 std::字符串
- Boost Filesystem Directory_iterator的非确定性执行
- 使用非原子布尔时的不确定行为
- 浮点处理器非确定性
- 在 c++ 中设计一个非确定性有限自动机(不正确的输出)
- 如何确定浮点数中的最后一个非零十进制数字
- C++:光线追踪器输出中的非确定性行为
- 遇到错误问题:在'{'之前,预期的非限定 id 只是一个我需要的类的标头,只是不确定导致错误的原因