C++ 中 std::fstream::X 和 std::ios::X 的区别

Difference between std::fstream::X and std::ios::X in C++

我是 C++ 新手。我有一个简单的问题想问你 std::fstream::X and std::ios::X 在 C++ 中打开文件模式有什么区别?

其中 x 可以是 in, out, ate, trunk, ate ?

这里有更多例子:

fs.open(filename.c_str(), std::fstream::in | std::fstream::out | std::fstream::app);

fs.open(filename.c_str(), std::ios::in | std::ios::out | std::ios::app);

这两者有什么区别?

我是C++初学者,请不要回答的太复杂

没有区别。 std::fstream::X 继承自 std::ios,因此它与 std::ios::X.

的值相同

引用 Input/Output in File

class: default mode parameter

ofstream: ios::out

ifstream: ios::in

fstream: ios::in | ios::out

For ifstream and ofstream classes, ios::in and ios::out are automatically and respectively assumed, even if a mode that does not include them is passed as second argument to the open() member function.

std::fstream继承自std::ios,据此page

从文件中读取时,我更喜欢使用 std::ifstream::in 标志,因为让编程接口知道您将使用它做什么是一个很好的编程习惯。

爱丽丝有一个儿子鲍勃。他们都有相同的头发颜色——比方说棕色。现在,有人问你:"What's their family's hair color?" 你可以说 A​​lice 的Bob 的:是一样的。

你能看出重点吗?虽然颜色相同,但鲍勃 继承了 她母亲的遗传。 std::ios::instd::fstream::in 是相同的——它是 相同的 值,因为它们具有继承关系,但这是它们的 "own" 值,因为它们不是同一类型(同样,爱丽丝和鲍勃也不是同一个人)。