C++使用默认初始化的迭代器创建空std::string

5
以下代码是否有效且定义良好?
auto start = std::string::const_iterator();
auto end = std::string::const_iterator();

auto output = std::string(start, end);

(期望的输出是一个空字符串。)

可能是迭代器的默认值是什么?的重复问题。 - apple apple
1
我猜没有保证两个默认构造(如果可能)的迭代器应该相等比较。 - apple apple
1个回答

8
根据cppreference.com,随机访问迭代器(其中包括字符串迭代器)符合双向迭代器的所有要求
此外,双向迭代器符合前向迭代器的所有要求
最后,自C++14以来,前向迭代器可以进行值初始化,并将等于同类型的所有其他值初始化的前向迭代器:

一个值初始化的LegacyForwardIterator的行为类似于某个未指定空容器的过去结束迭代器:它等于同类型的所有值初始化的LegacyForwardIterators。

基于此,我认为至少在C++14中这是明确定义的。

很高兴知道C++14标准需要单数迭代器,+1。 - Maxim Egorushkin
我认为迭代器在范围内指向同一个容器是必须的要求。 - Richard Critten
@RichardCritten 引用的措辞符合此要求;嗯,至少如果我们假设我们总是得到相同的未指定空容器。哈。 - Lightness Races in Orbit
1
补充说明:此保证不适用于默认初始化的迭代器。 - eerorika

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接