流的不同状态的定义(C ++)

时间:2015-01-16 16:53:36

标签: c++ class iostream definition template-classes

我知道ios_base有一个类似
流的状态声明 ios_base::goodbit(错误状态)
ios_base::ate(文件打开模式状态)
还有更多。
我感兴趣的是ios_base的这些成员函数的定义 它们是简单的还是类模板?他们是如何实施的?哪一个是父类(如果有的话)?

3 个答案:

答案 0 :(得分:3)

  

它们是简单的类还是类模板?

它们实际上是嵌套在std::ios_base类中的static constexpr声明(来自the reference documentation):

enter image description here

  

他们是如何实施的?哪一个是父类(如果有的话)?

如前所述,它是特定于编译器的实现。通常这些是简单的值而不使用父类

答案 1 :(得分:1)

它们不是“成员函数”,它们只是一些常量。

正如您在标准库标题中找到的那样,goodbitiostate类型的常量,而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 typestandard中定义(这是c ++ 14工作草案)。

  

17.5.2.1.3位掩码类型[bitmask.types]

     

[...] 可以实现每种位掩码类型   作为枚举类型,重载某些运算符,作为整数类型或作为bitset(20.5)。

这意味着,即使有bitset编译器仍然有一些自由如何实现它。

您询问的成员的精确定义在27.5.3.1 Types [ios.types]中定义,相关点基本上表示它们是位掩码类型。