C++新手提问关于fstream的读写问题

我在读《Essential C++》这本书,有个问题比较疑惑,求大神解答。代码如下:

#include <fstream>
using namespace std;

ofstream ofs("path/to/file.txt");
ofs << "abc" << ' ' << 1 << ' ' << 2 << endl;


ifstream ifs("path/to/file.txt");

string str;
int n1;
int n2;

ifs >> str; // abc
ifs >> n1;  // 1
ifs >> n2;  // 2

代码里面,为什么最后ifs每次输出会自动把abc / 1 / 2这三个数据分开?难道不是每次读取一行,然后再写代码分割吗?

能简单讲一下吗?

阅读 1.5k
1 个回答

由于ifstreamistream的子类,我们以istream为对象展开讨论。

非成员重载istream& operator>> (istream& is, string& str);和成员重载basic_istream& operator>>(int& value);,都以空格为分隔符,自动完成恰当的类型转换。

参见: http://cplusplus.com/referenc...

Notice that the istream extraction operations use whitespaces as separators; Therefore, this operation will only extract what can be considered a word from the stream. To extract entire lines of text, see the string overload of global function getline.
推荐问题
宣传栏