我见过人们做这样的事情......
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 找到在最后一次操作中提取的字符数。 .但是,它仅适用于某些忽略格式的函数,如 get
和 getline
,而不适用于提取运算符。
关于c++ - iostream,一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344788/