C++11 为什么STL输出迭代器只允许一次赋值?

C++11 为什么STL输出迭代器只允许一次赋值?,c++11,C++11,如本文所述: 可以作为左值取消引用(如果处于取消引用状态)。 它只能作为赋值语句的左侧取消引用。 一旦取消引用,其迭代器值可能不再是可取消引用的 旁边是一个有效表达式的示例: *a = t 在这个表达式(解引用)之后,我不能再解引用了。 例如,我不明白为什么我不能: *a = t2 在第一个表达式之后。一个原因是输出迭代器用于输出流,例如终端、管道和套接字。一旦数据写入流中,它就被视为发送到其他地方,因此无法更改。其他迭代器类型,包括普通迭代器和输入迭代器,定义了值类型的概念,即迭代器被

如本文所述:

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

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

*a = t
在这个表达式(解引用)之后,我不能再解引用了。
例如,我不明白为什么我不能:

*a = t2

在第一个表达式之后。

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

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

请注意,如果在此之前增加,确实可以再次取消引用。