C++ 如何强制std::cin不进行任何隐式转换?

C++ 如何强制std::cin不进行任何隐式转换?,c++,C++,我想知道我们是否可以强制std::cin,这样它就不会在数据类型之间执行任何隐式转换,例如: unsigned int number; cout<<"Please input a number :"; if(std::cin>>number)cout<<std::endl<<"Good number"; else cout<<"Bad number"; 无符号整数; coutnumber)coutcin将把值存储到您提供的数据类型中u

我想知道我们是否可以强制std::cin,这样它就不会在数据类型之间执行任何隐式转换,例如:

unsigned int number;
cout<<"Please input a number :";
if(std::cin>>number)cout<<std::endl<<"Good number";
else cout<<"Bad number";
无符号整数;

coutnumber)cout
cin
将把值存储到您提供的数据类型中
unsigned int
不会接受
signed
数字,因此它将溢出到最大的
unsigned int
0
。在您的示例中,您提供了一个
double
常量,它不是
无符号int
。如果你想让你的
unsigned int
按你想要的方式工作,把它改成
double

cin
将始终执行该转换;这不是你能控制的。我建议将该值读入字符串,并检查其
-
,然后从那里开始。

如果输入
-23
,您希望从流中读取什么?你期望得到什么?将其作为字符串读取,然后自己验证输入(?)不清楚你想要什么。你想读一个字符串吗?@Anubis先生:你想要一个异常而不是静默转换吗?或者把它读成一个字符串,然后用
strtol()
strtoul()
来解析它。或者用boost::lexical\u cast,如果没有使用所有数据,它会抛出一个异常。