std::ranges 的默认构造 std::forward_iterator 状态有要求吗?

问题描述 投票:0回答:1

要实现我自己的

std::forward_iterator
,我必须为该类型提供一个默认构造函数,因为它必须满足概念
std::sentinel_for
->
std::semiregular
->
std::default_initializable
,但实际上这个构造函数甚至从未被范围库和编译器使用过优化它。

我是否正确地认为默认构造的迭代器可能包含任何垃圾,包括对象的不一致状态,因为该对象永远不会被构造并且它的使用总是导致未定义的行为,或者对此类迭代器有一些特定的要求(例如“有效”、“指向 end()”等)?

我的问题是,对于我的迭代器,如果默认初始化,我无法创建一致的状态。

最好能参考一些文档来确保这是安全的还是不安全的。

c++ range
1个回答
0
投票
与所有前向迭代器一样,

std::array<T>::iterator
是默认可构造的。然而,它是一个简单的 typedef
T*

我是否正确地认为默认构造的迭代器[的] [...]用法总是导致未定义的行为[...]?

是的,让迭代器的默认构造函数构造一个迭代器,其取消引用会导致未定义的行为,这是可以的。

© www.soinside.com 2019 - 2024. All rights reserved.