3

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

4

3 回答 3

3

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

它们实际上是static constexpr嵌套在std::ios_base类中的声明(来自参考文档):

在此处输入图像描述

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

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

于 2015-01-16T17:13:57.823 回答
1

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

正如您可以在标准库头文件中找到的那样,goodbit它是一个带有 type 的常量iostate,并且ate是一个带有 type 的常量openmode

即 libc++ 在头文件“ios”中定义它们:

typedef unsigned int iostate;
static const iostate goodbit = 0x0;
...
typedef unsigned int openmode;
static const openmode ate    = 0x02;
于 2015-01-16T17:08:06.870 回答
1

从技术上讲,它们是。在命名空间中定义。BitmaskType constexprios_base

Bitmask type标准中定义(这是 c++14 工作草案)。

17.5.2.1.3 位掩码类型 [bitmask.types]

[...]每个位掩码类型都可以实现为重载某些运算符的枚举类型、整数类型或位集 (20.5)。

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

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

于 2015-01-16T17:14:13.923 回答