新的迭代器要求

Som*_*ken 40 c++ c++-concepts c++20

我注意到大多数(如果不是所有)容器现在都需要它们的::iterator类型LegacySomethingIterator而不是SomethingIterator.

例如,std::vector<>::iterator 现在需要:

iterator LegacyRandomAccessIterator

这似乎是大多数其它容器一样,都是需要自己迭代器从去SomethingIteratorLegacySomethingIterator.

还有"新"要求采用旧要求的名称,例如RandomAccessIterator,为什么这些要求被添加?在我看来,新的变种只会影响遗留的变种,没有差异.

为什么首先创建新的,他们的要求对我来说是一样的.为什么新的只是替换旧的要求而不是现在有两个不同的名称(例如RandomAccessIteratorLegacyRandomAccessIterator)?

Nic*_*las 35

这些不是新事物,因此称为"遗产".这就是cppreference网站如何选择协调C++ 20将有两个不同的东西,这两个东西都是"概念"称为"RandomAccessIterator"的事实.

在预C++ 20中,"概念"只是标准中的一组要求,表示某些模板参数的预期行为.在C++ 20中,随着概念成为一种实际的语言特征,需要转变.问题是,该范围random_access_iterator的" concept"是不一样的旧式""的"RandomAccessIterator的概念".

由于C++认为它们都是"概念"(尽管只有较新的概念RandomAccessIterator),因此它们在Wiki上都具有相同的页面名称.MediaWiki并不真的允许这样做.

因此,该网站的维护者决定使用"遗产"来区分它们.请注意,实际标准不使用此"Legacy"前缀.

请注意,C++ 20标准确实有旧概念的前缀:"Cpp17".所以旧概念将是"Cpp17RandomAccessIterator".由于显而易见的原因,这被认为不适合Cppreference.

  • @SombreroChicken标准使用"Cpp17"代替前缀,但我不想将C++ 98组件记录为需要Cpp17Thingamabob. (11认同)
  • 哈哈,真有趣。我实际上是编辑掉了那部分。我最初的帖子中还有一个问题,询问标准是否使用术语* LegacyIterator *,但后来我想我自己必须是因为cppreference始终非常符合标准。猜猜在这种情况下不,谢谢:) (2认同)