sbi*_*sbi 33 c++ iterator stl standard-library language-lawyer
前向,双向和随机访问类别的迭代器需要是默认构造的.
为什么这样,为什么输入和输出运算符不必是默认可构造的?
Jon*_*ely 14
需要使用前向迭代器和更强的函数来引用一些外部序列(参见[forward.iterators]/6,其中说"如果a
并且b
都是可解除引用的,那么a == b
当且仅当*a
和*b
并且绑定到同一个对象时.")
这意味着它们通常只是对其他东西的轻量级句柄(例如,指向容器中的元素或节点的指针),因此没有理由不要求它们可以默认构造(即使默认构造创建了单个迭代器)在分配新值之前不能用于任何事情).所有非病态*前向迭代器都可以支持默认构造,依赖于此可以使一些算法更容易实现.
只满足输入迭代器或输出迭代器要求(并且没有更强)的迭代器可能包含自己修改的状态operator++
,因此可能无法对该状态进行默认构造.没有只对输入/输出迭代器进行操作的算法需要默认构造它们,所以它不是必需的.
归档时间: |
|
查看次数: |
2013 次 |
最近记录: |