std::ifstream::in 和 std::ios::in 有什么区别? (显然作为 C++ 中 std::ifstream 的 openmode 标志)

What is the difference between std::ifstream::in and std::ios::in? (obviously as an openmode flag for an std::ifstream in C++)

我使用 SymbolHound 在网上寻找资源来比较两者,但找不到任何东西。

在 VS13 中寻找 std::ifstream::in 的声明和定义让我找到了 basic_ifstream。寻找 std::ios::in 会找到 basic_ios

好像std::ios::in用的比较广泛

提前致谢,

汉斯

如果您查看类型,std::ifstreamstd::basic_ifstream<char>std::iosstd::basic_ios<char>

那里的层次结构是:

template< 
    class CharT, 
    class Traits = std::char_traits<CharT>
> class basic_ifstream : public std::basic_istream<CharT, Traits>

即:

template< 
    class CharT, 
    class Traits = std::char_traits<CharT>
> class basic_istream : virtual public std::basic_ios<CharT, Traits>

std::iosstd::ifstream 的基数 class,因此 std::ifstream::in 正好是 std::ios::in.

它们是一样的。

instd::ios_base 的成员。因此,它也是 iosifstream 以及从 ios_base.

派生的所有其他内容的成员

It seems std::ios::in is more widely used.

可能是因为这是最短的命名方式。