3 回答
TA贡献1862条经验 获得超6个赞
cin是istream代表标准输入流的类的对象。它对应于cstdio流stdin。>>流的运算符重载返回对同一流的引用。可以通过转换运算符在布尔条件下将流本身评估为true或false。
cin提供格式化的流提取。手术 cin >> x;
如果输入非数字值,则“ x”为整数的位置将失败。所以:
if(cin>>x)
false如果您输入字母而不是数字,将返回。
有关使用C ++ I / O的技巧的本网站也将为您提供帮助。
TA贡献1789条经验 获得超10个赞
注意:事实回答四年后才更新,以解决C ++ 98/03和C ++ 11(及更高版本)。
std::cin
是的实例std::istream
。该类提供了两个与此问题有关的重载。
operator >>
如果可能,将数据从流中读取到目标变量中。如果流的立即内容不能转换为目标变量的类型,则将该流标记为无效,并且保持目标变量不变。无论操作成功与否,返回值都是对流的引用。任一
operator void*()
(预C ++ 11),其将流参照void*
指针,或explicit operator bool()
(C ++ 11),其将流参考一个布尔值。true
如果流有效,此转换的结果是非空指针(C ++ 11之前)或(C ++ 11),但空指针(C ++ 11之前)或false
(C ++ 11) )(如果流无效)。
一条if
语句需要布尔值,整数或指针作为要测试的数量。的结果std::cin >> x
是对的引用istream
,而上述都不是。但是,该类istream
确实具有那些转换运算符,可用于将istream
引用转换为if
语句中可用的内容。它是该语言用于if
测试的特定于版本的转换运算符。由于读取if
失败会将流标记为无效,因此如果读取无效,则测试将失败。
operator void*
在C ++ 11之前使用更复杂的转换成员的原因是,直到C ++ 11才将现有explicit
关键字扩展到适用于转换运算符和构造函数。非显式operator bool()
的编程会给程序员带来太多机会,使他们无法自拔。也有问题operator void*()
。“安全布尔成语”本来可以解决,但只需扩展即可explicit
完全实现安全布尔成语所要完成的事情,而不必使用很多SFINAE魔术。
TA贡献1815条经验 获得超6个赞
cin在std名称空间中是变量。
operator>>返回对的引用cin,因此您可以编写:cin >> a >> b,而不是cin >> a; cin >> b;
- 3 回答
- 0 关注
- 849 浏览
添加回答
举报