gpt4 book ai didi

c++ - 标准容器的迭代器是 DefaultConstructible 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:04:23 27 4
gpt4 key购买 nike

格式是否正确?

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 forwarditerator 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com