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

时间:2019-05-07 12:13:00

标签: c++ iterator language-lawyer

以下代码是否有效且定义明确?

auto start = std::string::const_iterator();
auto end = std::string::const_iterator();

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

(预期输出为空字符串。)

1 个答案:

答案 0 :(得分:7)

根据cppreference.com,一个随机访问迭代器,其中一个字符串迭代器为meets all requirements of a bidirectional iterator

此外,是双向迭代器meets all requirements of a forward iterator

最后,从C ++ 14开始,一个正向迭代器can be value-initialized将与等于相同类型的所有其他值初始化的正向迭代器进行比较:

  

值初始化的LegacyForwardIterator的行为类似于   一些未指定的空容器的最新迭代器:它比较   等于相同的所有值初始化的LegacyForwardIterator   类型。

基于此,我相信至少在C ++ 14之前,这是明确定义的。