Namespaces
Variants

std::ios_base::ios_base

来自 zh.cppreference.net
 
 
 
 
private:
ios_base( const ios_base& );
(1) (直到 C++11)
public:
ios_base( const ios_base& ) = delete;
(自 C++11 起)
protected:
ios_base();
(2)
1) 复制构造函数是 private(直到 C++11)deleted(自 C++11 起):流不可复制。
2) 默认构造函数是 protected:只有派生类可以构造 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 初始化无需在首次使用前完成 也需要完成初始化