不同流状态的定义(C++)
Definition of different States of Streams (C++)
我知道 ios_base
有一个流状态声明,例如
ios_base::goodbit
(错误状态)
ios_base::ate
(文件打开模式状态)
还有更多。
我感兴趣的是 ios_base
这些成员函数的定义
它们是简单的 class 还是 class 模板?它们是如何实施的?父class(如果有的话)是哪一个?
它们不是"member functions",它们只是一些常量。
你可以在标准库headers中找到,goodbit
是一个类型为iostate
的常量,而ate
是一个类型为[=14=的常量].
即libc++ 在 header "ios":
中定义了它们
typedef unsigned int iostate;
static const iostate goodbit = 0x0;
...
typedef unsigned int openmode;
static const openmode ate = 0x02;
Are they a simple class or a class template?
它们实际上是 static constexpr
嵌套在 std::ios_base
class (as from the reference documentation 中的声明):
How are they implemented? Which one is there parent class(if any)?
正如那里提到的,它是特定于编译器实现的。通常这些是不使用 parent class.
的简单值
从技术上讲,它们是 BitmaskType
constexpr
. Defined in ios_base
命名空间。
Bitmask type
在 standard 中定义(这是 c++14 工作草案)。
17.5.2.1.3 Bitmask types [bitmask.types]
[...] Each bitmask type can be implemented
as an enumerated type that overloads certain operators, as an integer type, or as a bitset (20.5).
这意味着,即使有 bitset
编译器仍然可以自由实现它。
你问的成员的准确定义在27.5.3.1 Types [ios.types]
中有定义,相关点基本都说是位掩码类型
我知道 ios_base
有一个流状态声明,例如
ios_base::goodbit
(错误状态)
ios_base::ate
(文件打开模式状态)
还有更多。
我感兴趣的是 ios_base
这些成员函数的定义
它们是简单的 class 还是 class 模板?它们是如何实施的?父class(如果有的话)是哪一个?
它们不是"member functions",它们只是一些常量。
你可以在标准库headers中找到,goodbit
是一个类型为iostate
的常量,而ate
是一个类型为[=14=的常量].
即libc++ 在 header "ios":
中定义了它们typedef unsigned int iostate;
static const iostate goodbit = 0x0;
...
typedef unsigned int openmode;
static const openmode ate = 0x02;
Are they a simple class or a class template?
它们实际上是 static constexpr
嵌套在 std::ios_base
class (as from the reference documentation 中的声明):
How are they implemented? Which one is there parent class(if any)?
正如那里提到的,它是特定于编译器实现的。通常这些是不使用 parent class.
的简单值从技术上讲,它们是 BitmaskType
constexpr
. Defined in ios_base
命名空间。
Bitmask type
在 standard 中定义(这是 c++14 工作草案)。
17.5.2.1.3 Bitmask types [bitmask.types]
[...] Each bitmask type can be implemented as an enumerated type that overloads certain operators, as an integer type, or as a bitset (20.5).
这意味着,即使有 bitset
编译器仍然可以自由实现它。
你问的成员的准确定义在27.5.3.1 Types [ios.types]
中有定义,相关点基本都说是位掩码类型