代码:
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
using std::cerr;
using std::cout;
using std::stringstream;
using std::string;
using std::for_each;
void convert(const string& a_value)
{
unsigned short i;
if (stringstream(a_value) >> i)
cout << a_value << " converted to " << i << ".\n";
else
cerr << a_value << " failed to convert.\n";
}
int main()
{
string inputs[] = { "abc", "10", "999999999999999999999", "-10", "0" };
for_each(inputs, inputs + (sizeof(inputs)/sizeof(inputs[0])), convert);
return 0;
}
Visual Studio 编译器(v7、v8、v9、v10)的输出:
abc 转换失败。 10 转换为 10。 999999999999999999999 转换失败。 -10 转换为 65526。 0 转换为 0。
g++ 的输出(v4.1.2、v4.3.4):
abc 转换失败。 10 转换为 10。 999999999999999999999 转换失败。 -10 转换失败。 0 转换为 0。
我预计"-10"
无法将其转换为,unsigned short
但它在 VC 编译器中成功。这是一个:
- VC 编译器中的错误?
- GNU 编译器中的错误,我的期望不正确?
- 实现定义的行为?