少なくとも初歩的なエラー検出で、C++のiostreamからの基数10(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読み、unsigned int型に変換されていました。
Appearently, the GCC people see this as a feature。この動作を強制する標準がありますか?それを抜け出すためにパーサーを作成する方法がありません。つまり、変換エラーとして「-4」(おそらくは「-0」)を検出しますか?
あなたは正しいバグレポートを投稿しましたか?それは抵抗なしで「固定」とマークされています。 – spraff
@spraff:これはそうです、これは負の数の動作について言及しています。 – thiton