格式是否正确?
int main() {
std::deque< int >::iterator x; // Or any container.
}
奖励问题:
auto y = x;
有可能复制未初始化状态吗?… x = {};
需要一个非显式默认构造函数呢?- 如果
x == y
都是值初始化的(如图所示不是默认初始化的)呢?
最佳答案
取决于您正在检查的迭代器概念。
如果它是一个常规的 Iterator
,这只是被称为迭代器的绝对最低限度,那么答案是否定的,因为它必须只满足 CopyConstructible、CopyAssignable 和 Destructible 的可构造性要求。 (§ 24.2.2/2)
然而,大多数容器迭代器满足双向迭代器的要求(std::forward_list
除外,这是一个异常)。所有的 BidirectionalIterators 反过来也满足 ForwardIterator 的要求,满足 InputIterator 的要求(相当啰嗦)。
ForwardIterator 的要求明确说明:
A class or pointer type X satisfies the requirements of a forward iterator if
— X satisfies the requirements of an input iterator (24.2.3),
— X satisfies the DefaultConstructible requirements (17.6.3.1),
N3376 中的 24.2.5/1
所以是的,这是一个有效的假设。
您可以在 § 24.2 中找到迭代器要求,但在 cppreference 中对其进行了很好的总结。
关于c++ - 标准容器的迭代器是 DefaultConstructible 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20114819/