1

为什么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
4

1 回答 1

5

流输入操作的返回值是流。

表达方式

ss >> aa

等于

operator>>(ss, aa)

并且operator>>()函数返回第一个参数。

使用多个输入操作只是链接函数调用。例如

ss >> aa >> bb;

变成

operator>>(ss, aa).operator>>(ss, bb);

流可以用作布尔表达式的原因是因为它有一个特殊的转换运算,可以这样使用它。


顺便说一句,你不应该使用while (!stream.eof()). 而是使用返回流的事实getline,并且流可以在布尔表达式中使用:

while (inputFile.getline(line, 1023))
{
    // ...
}
于 2013-03-04T13:30:54.237 回答