std::ios_base:: ios_base
From cppreference.net
| (1) | ||
|
private
:
ios_base ( const ios_base & ) ; |
(C++11 前) | |
|
public
:
ios_base ( const ios_base & ) = delete ; |
(C++11 起) | |
|
protected
:
ios_base ( ) ; |
(2) | |
1)
复制构造函数被
private
(until C++11)
deleted
(since C++11)
:流不可复制。
2)
默认构造函数受保护:仅派生类可以构造
std::ios_base
。构造后内部状态未定义。派生类必须在首次使用前或析构函数前调用
std::basic_ios::init()
来完成初始化;否则行为未定义。
注释
这同样适用于I/O层次结构中下一个类的构造函数, std::basic_ios 。进一步派生的类( std::istream 和 std::ostream )总是通过具体的流缓冲区对象构造,并调用 std::basic_ios::init() (可能多次)来完成其虚基类的初始化。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用标准 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 50 | C++98 | 未指定拷贝构造函数 | 指定为私有 |
| LWG 220 | C++98 |
在调用其
init()
之前销毁
std::ios_base
对象的行为不明确
|
此情况下行为
未定义 |
| LWG 1249 | C++98 | 初始化无需在首次使用前完成 | 也需要完成初始化 |