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

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)

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

Sam*_*hik 8

根据cppreference.com的说法,一个随机访问迭代器(其中一个字符串迭代器为一个)可以满足双向迭代器的所有要求

此外,双向迭代器满足前向迭代器的所有要求

最后,从C ++ 14开始,正向迭代器可以进行值初始化,并且将与相同类型的所有其他经过值初始化的正向迭代器进行比较:

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

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