【问题标题】:std::back_insert_iterator in C++17C++17 中的 std::back_insert_iterator
【发布时间】:2017-01-15 21:15:21
【问题描述】:

如前 C++17 中的 here std::back_insert_iterator 所示,继承自 std::iterator,而在 C++17 中则没有。这种变化的原因是什么?

【问题讨论】:

标签: c++ stl iterator c++17


【解决方案1】:

std::iterator 很方便。它提供了一些使用迭代器的代码觉得有用的 typedef。目前首选的机制是std::iterator_traits,它更灵活。

当迭代器实际上是一个指针时,它不能从std::iterator 继承,所以iterator_traits 一直是获取这些类型定义的方法。在作为类的迭代器类型中拥有 typedef,但在作为指针的迭代器类型中没有 typedef,这意味着泛型代码不能使用这些成员。拥有它们几乎没有用处,而且它们即将消失。

【讨论】:

  • 为了明确Pete 所说的,std::iterator 没有任何数据成员或任何成员函数。它只是提供了一些嵌套的 typedef。只要 typedef 中的信息可用(并且std::iterator_traits 是获取它的机制),那么迭代器是否实际继承以获取 typedef 或自己声明它们都没有区别。
猜你喜欢
  • 1970-01-01
  • 2021-10-26
  • 2018-07-28
  • 2015-11-01
  • 2017-12-11
  • 2023-03-23
  • 1970-01-01
  • 2017-01-20
  • 2017-03-14
相关资源
最近更新 更多