fstream 的默认模式

Default mode of fstream

我正在查看 SO post C++ file stream open modes ambiguity。我想知道fstream默认的文件打开方式。其中一个答案说,

What the above implies is that the following code opens the file with exactly the same open flags fstream f("a.txt", ios_base::in | ios_base::out); ifstream g("a.txt", ios_base::out); ofstream h("a.txt", ios_base::in);

因此,如果我理解正确,如果我创建了 fstream 对象,我应该能够读取或写入。

但是下面的代码没有向文件写入任何数据

fstream testFile1;
testFile1.open("text1.txt");
testFile1<<"Writing data to file";
testFile1.close();

但是,如下所示添加模式会创建包含数据的文本文件 "Writing data to file"

testFile1.open("text1.txt", ios::out);

那么默认模式是否是实现定义的?我正在使用 TDM-GCC-64 工具链。

ifstream的默认模式是inofstream 的默认模式是 out。这就是为什么他们这样命名的原因。 fstream 具有 默认模式。

您的示例仅显示了两个默认值,并且通过省略显式参数来显示。 fstream f("a.txt", ios_base::in | ios_base::out) 使用两个显式参数正是因为没有默认模式。

std::fstreams 的默认模式是 std::ios::in|std::ios::out。 (Source)

您的代码未向 test1.txt 打印任何内容的原因是 std::ios::in|std::ios::out 模式不会创建文件(如果该文件尚不存在)(Source: table on this page)。

可以使用std::ios::in|std::ios::app方式,从头开始读,从尾开始写,文件不存在则创建。请注意,使用 app 模式,文件将在每次写入 (Source) 之前查找到末尾。