Introduction To C++ IO Streams
Introduction To C++ IO Streams
我从这篇文章中得到了一段代码,我对它是如何工作的感到困惑?该片段首先说:
您可以通过测试读取结果来检测特定读取或写入操作是否失败。例如,要检查是否从用户读取了有效的整数,您可以执行以下操作:
int x;
if ( cin >> x )
{
cout << "Please enter a valid number" << endl;
}
这是有效的,因为读取操作返回对流的引用。
我知道 cin>> x 操作返回对 cin 的引用,但我仍然对如何评估对标准输入流对象的引用允许您检查输入是否为有效整数感到困惑。
cin
是istream
模板类的实例。 operator >>
作用于此 istream 实例以将输入加载到数据中,并返回对此istream
的引用。然后在while
条件下,通过调用 cin::operator void*() const
进行测试(C++11 中explicit operator bool() const
),该调用fail()
函数来测试操作是否成功。这就是为什么您可以在 while 条件下使用此操作的原因
while ( cin >> x)
{
//...
根据文档(http://www.cplusplus.com/reference/ios/ios/operator_bool/),运算符
explicit operator std::ios::bool() const;
"返回是否设置了错误标志(failbit 或 badbit)"和"如果至少设置了其中一个错误标志,则函数返回 false,否则返回 true"。
因此,当 if
语句将cin
流强制转换为 bool
时,如果流设置了错误标志,则此运算符返回 false
,否则true
返回。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在读取文件大小时文件IO速度会发生变化
- Agora.io 虚幻引擎插件构建错误
- 不将数据 socket.io c++(客户端)发送到 nodejs(服务器)socket.io
- ASIO signal_set多个 IO 线程不可靠,具体取决于代码顺序?
- 通过 Tor 服务C++ socket.io 客户端
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 如何读取 google::p rotobuf::io::CodedOutputStream::WriteVarint32
- Conan.io 在编译步骤中或已经在签出时
- C++中真正的异步文件 IO
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 在C++中返回 IO 对象的目的是什么?
- 如何创建一个 while 循环,继续循环,直到在C++中输入'using streams'键?
- C++应用程序缺少 winrt::Windows::Storage::Streams::D ataWriter
- 使用 Broadcast 发出的从节点服务器发送的数据不能被 C++ 套接字 IO 客户端读取
- C++网络 IO、文件处理和网络故障
- Introduction To C++ IO Streams
- C++ io streams versus mmap
- c++ JNI在做任何IO/Streams时崩溃/挂起