我见过人们在做类似...的事情。

 istringstream ibuf;

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

现在,我猜该值取决于>> iB公开的内容,但是那到底是什么意思,这是什么意思?是真的意味着提取了所有的油菜籽吗?

另外,像
 ibuf >>  zork >> iA >> Comma >> iB;

有什么方法可以找出提取了多少个字符和项目?

最佳答案

之所以有效,是因为istream对象具有两个属性:

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

    基本上,您编写的代码是以下内容的简写形式:
    if ( ((((ibuf >> zork) >> ia) >> Comma) >> ib).good() ) {
    
    }
    

    完成所有提取操作后,您将剩下if (ibuf),这与编写if ((bool)ibuf)(检查ibuf.good())隐式地类似。

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

    10-04 13:29