【发布时间】:2011-12-02 09:25:14
【问题描述】:
我想从 C++ iostream 中读取以 10 为底(十进制)表示的无符号整数,并至少进行基本的错误检测。在我看来,在这种情况下,减号显然是一个错误,因为无符号整数没有符号。但是,gcc 的看法不同:
#include <iostream>
#include <sstream>
int main() {
std::stringstream a("5"), b("-0"), c("-4");
unsigned int i;
a >> i; if ( a ) std::cout << i << std::endl; else std::cout << "Conversion failure" << std::endl;
b >> i; if ( b ) std::cout << i << std::endl; else std::cout << "Conversion failure" << std::endl;
c >> i; if ( c ) std::cout << i << std::endl; else std::cout << "Conversion failure" << std::endl;
return 0;
}
给我一个输出
4294967292
对于最后一行,就好像一个有符号整数 -4 已被读取并转换为无符号整数。
Apparently, the GCC people see this as a feature。是否有一些标准要求这种行为,是否有任何方法可以编写自己的解析器来摆脱它,即将“-4”(可能是“-0”)检测为转换错误?
【问题讨论】:
-
您是否发布了正确的错误报告?那个被标记为“固定”,没有任何阻力。
-
@spraff:好像是这样,这个提到了负数行为。