我见过人们做的事情......
istringstream ibuf;
if (ibuf >> zork >> iA >> Comma >> iB)
现在我猜这个值取决于>> iB暴露的内容,但究竟是什么,它是什么意思?真的意味着所有的iet都被提取了吗?
此外,在表达式
之后 ibuf >> zork >> iA >> Comma >> iB;
有没有办法找出提取的字符数和项目数?
答案 0 :(得分:3)
这是因为istream对象的两个属性:
>>
运算符)以允许链接多个提取(a >> b >> c
).good()
bool operator !()
一样)
基本上你编写的代码是:
的简写版本if ( ((((ibuf >> zork) >> ia) >> Comma) >> ib).good() ) {
}
一旦完成所有提取,您就会留下if (ibuf)
,这与写if ((bool)ibuf)
隐含地相似,会检查ibuf.good()
。
无法获取通过一系列链式提取提取的字符数,但您可以使用函数gcount找到上次操作期间提取的字符数。但是,它仅适用于某些格式忽略函数,如get
和getline
,而不适用于提取运算符。
答案 1 :(得分:1)
第二段代码从ibuf
读取一组值到它后面的变量。但是,隐藏operator >>()
调用的返回是istringstream
对象。没有直接的方法来获得字符数。
您可以查看gcount
成员函数,该函数提供上次无格式输入操作的字符数。请注意,这是每个操作,因此不能使用级联。您还可以使用read
成员函数。
编辑:
(ibuf >> zork >> iA >> Comma >> iB)
实际上是:
((((ibuf.operator >>(zork)).operator >>(iA)).operator >>(Comma)).operator >>(iB))
括号的嵌套级别告诉您调用的顺序(和参数)。
答案 2 :(得分:0)
if (ibuf >> zork >> iA >> Comma >> iB)
在逻辑上等于:
ibuf >> zork;
ibuf >> iA;
ibuf >> Comma;
ibuf >> iB;
if (ibuf) ...
“有没有办法找出提取的字符和项目数量?”
有成员函数“gcount”:http://www.cplusplus.com/reference/iostream/istream/gcount/