我知道ios_base
有一个类似
流的状态声明
ios_base::goodbit
(错误状态)
ios_base::ate
(文件打开模式状态)
还有更多。
我感兴趣的是ios_base
的这些成员函数的定义
它们是简单的类还是类模板?他们是如何实施的?哪一个是父类(如果有的话)?
答案 0 :(得分:3)
它们是简单的类还是类模板?
它们实际上是嵌套在std::ios_base
类中的static constexpr
声明(来自the reference documentation):
他们是如何实施的?哪一个是父类(如果有的话)?
如前所述,它是特定于编译器的实现。通常这些是简单的值而不使用父类。
答案 1 :(得分:1)
它们不是“成员函数”,它们只是一些常量。
正如您在标准库标题中找到的那样,goodbit
是iostate
类型的常量,而ate
是类型为openmode
的常量。
即。 libc ++在标题“ios”中定义它们:
typedef unsigned int iostate;
static const iostate goodbit = 0x0;
...
typedef unsigned int openmode;
static const openmode ate = 0x02;
答案 2 :(得分:1)
从技术上讲,它们是BitmaskType
constexpr
。在ios_base
命名空间中定义。
Bitmask type
在standard中定义(这是c ++ 14工作草案)。
17.5.2.1.3位掩码类型[bitmask.types]
[...] 可以实现每种位掩码类型 作为枚举类型,重载某些运算符,作为整数类型或作为bitset(20.5)。
这意味着,即使有bitset
编译器仍然有一些自由如何实现它。
您询问的成员的精确定义在27.5.3.1 Types [ios.types]
中定义,相关点基本上表示它们是位掩码类型。