为什么ss >> aa >> bb >> cc >> dd
可用于状态检查?如果我使用ss >> aa >> bb >> cc >> dd >> ee
这个操作的返回值是什么?
ifstream inputFile("source.txt", ifstream::in);
string aa, bb, cc, dd;
char line[1024];
while(!inputFile.eof())
{
inputFile.getline(line, 1023);
stringstream ss(stringstream::in | stringstream::out);
ss.str(line);
if(ss >> aa >> bb >> cc >> dd)
{
cout << aa << "-" << bb << "-" << cc << "-" << dd << endl;
}
}
使用 source.txt :
1aaa ddd eee asd
2dfs dfsf sdfs fd
3sdf sdfsdfsdf d s
答案 0 :(得分:5)
流输入操作的返回值是流。
表达式
ss >> aa
等于
operator>>(ss, aa)
并且operator>>()
函数返回第一个参数。
使用多个输入操作只需链接函数调用。例如
ss >> aa >> bb;
变为
operator>>(ss, aa).operator>>(ss, bb);
原因一个流可以用作布尔表达式,因为它有一个特殊的conversion operator,允许它被这样使用。
顺便说一句,你不应该使用while (!stream.eof())
。而是使用getline
返回流的事实,并且可以在布尔表达式中使用流:
while (inputFile.getline(line, 1023))
{
// ...
}