我从这篇文章得到了一段代码,我不知道它是如何工作的?片段开头说:
您可以通过测试读取结果来检测特定的读或写操作失败。例如,要检查是否从用户读取有效整数,可以执行以下操作:
int x;
if ( cin >> x )
{
cout << "Please enter a valid number" << endl;
}这是因为读取操作返回对流的引用。
我知道cin >> x操作返回对cin的引用,但对于如何计算对标准输入流对象的引用使您能够检查输入是否为有效整数,我仍然感到困惑。
发布于 2014-02-11 21:25:09
cin是istream模板类的一个实例。operator >>对这个istream实例进行操作,将输入加载到数据中,并返回对此istream的引用。然后在while条件下,通过调用cin::operator void*() const (explicit operator bool() const in C++11)进行测试,调用fail()函数来测试操作是否成功。这就是为什么可以在时间条件下使用此操作的原因。
while ( cin >> x)
{
//...发布于 2014-02-11 21:30:39
根据文档( 布尔/ ),操作员
explicit operator std::ios::bool() const;“返回是否设置了错误标志(故障位还是坏位)。”“如果设置了至少一个错误标志,则函数返回false,否则返回true。”
因此,当if语句将cin流转换为bool时,如果流设置了错误标志,则该操作符返回false,而true则返回错误标志。
https://stackoverflow.com/questions/21713282
复制相似问题