c++ - iostream,一些问题

标签 c++ iostream

我见过人们做这样的事情......

 istringstream ibuf;

 if (ibuf >>  zork >> iA >> Comma >> iB)

现在我猜这个值取决于 >>iB 暴露的内容,但到底是什么以及它意味着什么? true 是否意味着提取了所有 ietms?

此外,在像这样的表达式之后

 ibuf >>  zork >> iA >> Comma >> iB;

有没有办法找出提取了多少个字符和项目?

最佳答案

这是因为 istream 对象的两个属性:

  • istreams 在每次提取后返回自己(>>> 运算符)以允许链接多个提取(a >> b >> c)
  • istreams 在通过重载 bool operator !() 转换/转换为 bool 时返回它们的状态(就像调用了 .good() 一样)<

基本上,您编写的代码是以下内容的简写版本:

if ( ((((ibuf >> zork) >> ia) >> Comma) >> ib).good() ) {

}

一旦所有的提取都发生了,你就剩下 if (ibuf) 这隐含地类似于编写 if ((bool)ibuf),它检查 ibuf.good().

无法获得通过一系列链式提取提取的字符数,但您可以使用函数 gcount 找到在最后一次操作中提取的字符数。 .但是,它仅适用于某些忽略格式的函数,如 getgetline,而不适用于提取运算符。

关于c++ - iostream,一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344788/

相关文章:

c++ - 使用 strrev 在 C++ 中正确反转字符串

c++ - 从输入文件写入输出文件

C++ GetLine() 问题,命令行程序

c++ - 如何从 C++ std::basic_ostream 派生并使 << 运算符虚拟?

c++ - 如何使用 QtMqtt 和 SSL 执行安全 MQTT?

c++ - 如何在不调用默认构造函数的情况下创建 C 风格的数组?

c++ - 了解左值/右值表达式与对象类型

java - 标记和预读限制

c++ - 带有大写 iostream 的小写 0x

c++ - 为什么 C++11 中没有 `static_if`