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 に答える