Gast
2006-09-28, 08:46:46
Hallo,
ich hätte eine frage zum basic_istream operator >> (unsigned long&).
Laut MSDN gilt folgendes:
"If the converted value cannot be represented as the type of _Val, the function calls setstate(failbit). In any case, the function returns *this."
Ein Beispiel von mir sieht so aus:
#include <string>
#include <sstream>
#include <iostream>
int main(int, char**)
{
std::string number = "-50";
std::istringstream iss(number);
unsigned long num = 0;
iss >> num;
std::cout << iss.bad() << " " << iss.fail()
<< " " << iss.good() << " " << iss.eof()
<< std::endl;
return 0;
}
Meiner Meinung nach ist "-50" kein gültiger unsigned long, daher müsste theoretisch das failbit gesetzt werden, wird es allerdings nicht, es ist nur das eof bit gesetzt. Der Wert von num nach dem operator >> ist 0xffffffce.
Danke für eure Ratschläge.
lg,
Stefan
P.S.: Ich hab es mit MSVC 6.0 und MSVC 8.0 (aka Visual Studio .NET 2005) getestet.
ich hätte eine frage zum basic_istream operator >> (unsigned long&).
Laut MSDN gilt folgendes:
"If the converted value cannot be represented as the type of _Val, the function calls setstate(failbit). In any case, the function returns *this."
Ein Beispiel von mir sieht so aus:
#include <string>
#include <sstream>
#include <iostream>
int main(int, char**)
{
std::string number = "-50";
std::istringstream iss(number);
unsigned long num = 0;
iss >> num;
std::cout << iss.bad() << " " << iss.fail()
<< " " << iss.good() << " " << iss.eof()
<< std::endl;
return 0;
}
Meiner Meinung nach ist "-50" kein gültiger unsigned long, daher müsste theoretisch das failbit gesetzt werden, wird es allerdings nicht, es ist nur das eof bit gesetzt. Der Wert von num nach dem operator >> ist 0xffffffce.
Danke für eure Ratschläge.
lg,
Stefan
P.S.: Ich hab es mit MSVC 6.0 und MSVC 8.0 (aka Visual Studio .NET 2005) getestet.