【问题标题】:C++ using default-initialized iterators to create an empty std::stringC++ 使用默认初始化的迭代器创建一个空的 std::string
【发布时间】:2019-05-07 12:13:00
【问题描述】:

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

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

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

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

【问题讨论】:

标签: c++ iterator language-lawyer


【解决方案1】:

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

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

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

值初始化的 LegacyForwardIterator 的行为类似于 一些未指定的空容器的结束迭代器:它比较 等于相同的所有值初始化的 LegacyForwardIterators 输入。

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

【讨论】:

  • 很高兴知道 C++14 标准需要单数迭代器,+1。
  • 我认为需要将范围内的迭代器指向同一个容器。
  • @RichardCritten 引用的措辞遵守这样的要求;好吧,至少,如果我们假设我们总是得到 same 未指定的空容器。呵呵。
  • Addedndum:此保证不适用于默认初始化的迭代器。
猜你喜欢
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多