iostream,一些问题

Mik*_*e D 5 c++ iostream

我见过人们做的事......

 istringstream ibuf;

 if (ibuf >>  zork >> iA >> Comma >> iB)
Run Code Online (Sandbox Code Playgroud)

现在我猜这个值取决于>> iB暴露了什么,但究竟是什么,它是什么意思?真的意味着所有的iet都被提取了吗?

还有,表达之后

 ibuf >>  zork >> iA >> Comma >> iB;
Run Code Online (Sandbox Code Playgroud)

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

mea*_*gar 3

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

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

一旦所有的提取都发生了,你剩下的就是if (ibuf)隐含地像写作一样if ((bool)ibuf),它检查ibuf.good()

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