我见过人们在做类似...的事情。
istringstream ibuf;
if (ibuf >> zork >> iA >> Comma >> iB)
现在,我猜该值取决于>> iB公开的内容,但是那到底是什么意思,这是什么意思?是真的意味着提取了所有的油菜籽吗?
另外,像
ibuf >> zork >> iA >> Comma >> iB;
有什么方法可以找出提取了多少个字符和项目?
最佳答案
之所以有效,是因为istream对象具有两个属性:
>>
运算符),以允许链接多个提取(a >> b >> c
).good()
bool operator !()
一样)基本上,您编写的代码是以下内容的简写形式:
if ( ((((ibuf >> zork) >> ia) >> Comma) >> ib).good() ) {
}
完成所有提取操作后,您将剩下
if (ibuf)
,这与编写if ((bool)ibuf)
(检查ibuf.good()
)隐式地类似。无法获得一系列链式提取中提取的字符数,但是您可以使用gcount函数找到在上一次操作期间提取的字符数。但是,它仅适用于某些格式忽略功能,例如
get
和getline
,而不适用于提取运算符。