use*_*679 5 c++ iterator language-lawyer
以下代码有效且定义明确吗?
auto start = std::string::const_iterator();
auto end = std::string::const_iterator();
auto output = std::string(start, end);
Run Code Online (Sandbox Code Playgroud)
(预期输出为空字符串。)
根据cppreference.com的说法,一个随机访问迭代器(其中一个字符串迭代器为一个)可以满足双向迭代器的所有要求。
此外,双向迭代器满足前向迭代器的所有要求。
最后,从C ++ 14开始,正向迭代器可以进行值初始化,并且将与相同类型的所有其他经过值初始化的正向迭代器进行比较:
值初始化的LegacyForwardIterator的行为类似于某些未指定的空容器的过去的迭代器:它与等于同一类型的所有值初始化的LegacyForwardIterator相等。
基于此,我认为至少在C ++ 14中,这是明确定义的。