以下代码是否有效且定义明确?
auto start = std::string::const_iterator();
auto end = std::string::const_iterator();
auto output = std::string(start, end);
(预期输出为空字符串。)
答案 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之前,这是明确定义的。