std::ios_base::ios_base

来自cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
(1)
private:
ios_base( const ios_base& );
(C++11 前)
public:
ios_base( const ios_base& ) = delete;
(C++11 起)
protected:
ios_base();
(2)

1) 复制构造函数是私有的 (C++11 前)被弃置 (C++11 起):不能复制流。

2) 默认构造函数受保护:只有派生类可以构造 std::ios_base。构造后内部状态未定义。派生类必须在首次使用或析构函数前调用 std::basic_ios::init() 完成初始化;否则行为未定义。

注解

同样的情况应用于输入/输出层级中的下个类 std::basic_ios 的构造函数。进一步派生的类(std::istreamstd::ostream)始终以具体的流缓冲构造,并可能多次调用 std::basic_ios::init() 以完成它的虚基类的初始化。

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 50 C++98 未指明复制构造函数 指明为私有成员函数
LWG 220 C++98 在还没有调用 std::ios_base 对象的 init() 时就销毁该对象的行为不明确 此时行为未定义
LWG 1249 C++98 在首次使用前不需要完成初始化 也需要完成初始化