我知道它ios_base
有一个流的状态声明,比如
ios_base::goodbit
(错误状态)
ios_base::ate
(文件打开模式状态)
等等。
我有兴趣知道这些成员函数的定义是ios_base
简单的类还是类模板?它们是如何实施的?哪一个有父类(如果有)?
问问题
85 次
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
constexpr
ios_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 回答