要实现我自己的
std::forward_iterator
,我必须为该类型提供一个默认构造函数,因为它必须满足概念std::sentinel_for
-> std::semiregular
-> std::default_initializable
,但实际上这个构造函数甚至从未被范围库和编译器使用过优化它。
我是否正确地认为默认构造的迭代器可能包含任何垃圾,包括对象的不一致状态,因为该对象永远不会被构造并且它的使用总是导致未定义的行为,或者对此类迭代器有一些特定的要求(例如“有效”、“指向 end()”等)?
我的问题是,对于我的迭代器,如果默认初始化,我无法创建一致的状态。
最好能参考一些文档来确保这是安全的还是不安全的。
std::array<T>::iterator
是默认可构造的。然而,它是一个简单的 typedef T*
。
我是否正确地认为默认构造的迭代器[的] [...]用法总是导致未定义的行为[...]?
是的,让迭代器的默认构造函数构造一个迭代器,其取消引用会导致未定义的行为,这是可以的。