2013-03-04 5 views
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 
+1

Обратите внимание, что вы используете результаты 'inputFile.getline' без проверки, удалось ли это или нет. –

ответ

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)) 
{ 
    // ... 
} 
+0

И он затем преобразуется в 'void *', я считаю, что это «это правда или нет», и значение основано на флагах состояния (таких же, как '! Good' или что-то близкое к этому) –

+0

@MatsPetersson Or 'bool' (если используется C++ 11). Просто добавил это. И это «правда», когда 'fail()' возвращает 'true'. –

+0

@MatsPetersson _Not_ так же, как 'good()', а скорее '! Fail()'. Это важно: 'good()' включает в себя 'eofflag' в его оценке, что делает его бесполезным; 'fail()' возвращает 'failbit || badbit'; другими словами, он учитывает только результаты предыдущего ввода. –

Смежные вопросы