如上所述: http://www.cplusplus.com/reference/iterator/OutputIterator/
可以作为左值取消引用(如果处于可解除引用的状态)。 它只能被解除引用作为赋值语句的左侧。 一旦取消引用,其迭代器值可能不再可解除引用。
旁边有一个有效表达式的例子:
*a = t
在这个表达(取消引用)之后,我再也不能退缩了。
我不明白为什么我不能这样做:
*a = t2
第一个表达后。
答案 0 :(得分:3)
一个原因是输出迭代器用于输出流,例如终端,管道和套接字。一旦将数据写入流中,就会将其视为发送到其他地方,因此无法更改。
答案 1 :(得分:0)
其他迭代器类型(包括Trivial Iterator和Input Iterator)定义了值类型的概念,即取消引用迭代器时返回的类型。但是,此概念不适用于输出迭代器,因为取消引用运算符(一元运算符*)不会为输出迭代器返回可用值。可以使用解引用运算符的唯一上下文是通过输出迭代器赋值:* x = t。虽然输入迭代器和输出迭代器是大致对称的概念,但是存在一个重要的意义,即访问和存储值不是对称的:对于输入迭代器操作符*必须返回唯一类型,但是对于输出迭代器,在表达式* x中= t,没有理由为operator =必须采用唯一类型。因此,不需要任何独特的价值类型"用于输出迭代器。