在条件下使用提取运算符的返回值?

时间:2013-03-04 13:29:36

标签: c++

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

1 个答案:

答案 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))
{
    // ...
}