为什么STL输出迭代器只允许一次分配?

时间:2017-05-19 11:06:39

标签: c++11

如上所述: http://www.cplusplus.com/reference/iterator/OutputIterator/

  

可以作为左值取消引用(如果处于可解除引用的状态)。   它只能被解除引用作为赋值语句的左侧。   一旦取消引用,其迭代器值可能不再可解除引用。

旁边有一个有效表达式的例子:

*a = t

在这个表达(取消引用)之后,我再也不能退缩了。
我不明白为什么我不能这样做:

*a = t2

第一个表达后。

2 个答案:

答案 0 :(得分:3)

一个原因是输出迭代器用于输出流,例如终端,管道和套接字。一旦将数据写入流中,就会将其视为发送到其他地方,因此无法更改。

答案 1 :(得分:0)

其他迭代器类型(包括Trivial Iterator和Input Iterator)定义了值类型的概念,即取消引用迭代器时返回的类型。但是,此概念不适用于输出迭代器,因为取消引用运算符(一元运算符*)不会为输出迭代器返回可用值。可以使用解引用运算符的唯一上下文是通过输出迭代器赋值:* x = t。虽然输入迭代器和输出迭代器是大致对称的概念,但是存在一个重要的意义,即访问和存储值不是对称的:对于输入迭代器操作符*必须返回唯一类型,但是对于输出迭代器,在表达式* x中= t,没有理由为operator =必须采用唯一类型。因此,不需要任何独特的价值类型"用于输出迭代器。