c++ - 为什么从 C++ I/O 系统中删除了 iostream_withassign、ostream_withassign 和 istream_withassign 类?

标签 c++ iostream language-history

在 C++98 之前,在 C++ I/O 类层次结构中有 3 个名为 iostream_withassign、ostream_withassignistream_withassign 的类。

iostream_withassign 类的成员函数:

构造函数和析构函数

~iostream_withassign

public:virtual ~iostream_withassign()

iostream_withassign

public:iostream_withassign()

创建一个 iostream_withassign 对象。它不对此对象进行任何初始化。

运算符=

public:iostream_withassign& operator =(iostream_withassign& rhs)

赋值运算符 运算符 =

重载 1

public:iostream_withassign& operator =(streambuf*)

此赋值运算符采用指向 streambuf 对象的指针,并将此 streambuf 对象与赋值运算符左侧的 iostream_withassign 对象相关联。

重载 2

public:iostream_withassign& operator =(ios&)

此赋值运算符采用对 ios 对象的左值引用,并将附加到此 ios 对象的流缓冲区与赋值运算符左侧的 iostream_withassign 对象相关联。

来源:this .

同理this说:

ostream_withassign 类是 ostream 的一个变体,它允许对象分配。预定义对象 cout、cerr 和 clog 是此类的对象,因此可以在运行时重新分配给不同的 ostream 对象。例如,通常将输出发送到 stdout 的程序可能会被临时指示将其输出发送到磁盘文件。它还包含构造函数、析构函数和 =(赋值)运算符函数。

我不明白,为什么会有这些类?这3个类有什么用吗?为什么后来这 3 个类从 C++98 标准中删除了?这是什么原因?

另请参阅 C++ 流类层次结构。它没有这 3 个类。

C++ I/O class hierarchy

最佳答案

他们发现有缺陷。它们被替换为:

  1. iostate rdstate()读取流状态。
  2. void clear(iostate state = goodbit)设置流状态。
  3. basic_streambuf<class charT, class Traits>* rdbuf()检索流缓冲区。
  4. basic_streambuf<class charT, class Traits>* rdbuf(basic_streambuf<class charT, class Traits>* sb)设置流缓冲区。
  5. basic_ios<class charT, class Traits>& copyfmt(basic_ios<class charT, class Traits>& rhs)设置 rhs 的所有其他数据成员。

关于c++ - 为什么从 C++ I/O 系统中删除了 iostream_withassign、ostream_withassign 和 istream_withassign 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33972164/

相关文章:

c++ - 如何播种随机数生成器?

c++ - 有关C++中函数的默认返回类型的查询

c++ - 模板编程 - 常见错误

C++ 再次重载 <<

c++ - 是否存在非 POD 结构优于类的有效用例?

c++ boost线程glibc检测到无效指针

c++ - 从 CPPRest 库(即 casablanca)获得的结果中提取基本 STL 字符串?

java - PrintWriter vs PrintStream vs OutputStreamWriter 时间成本

java - 左手坐标系的历史原因

javascript - 为什么 javascript 程序以纯文本形式交付?