【问题标题】:What are SCARY iterators?什么是 SCARY 迭代器?
【发布时间】:2013-01-18 02:52:19
【问题描述】:

当我谈到 SCARY 迭代器主题时,我正在阅读有关 VC11 的 C++11 功能的VC11 Blog

什么是 SCARY 迭代器,这对我的 C++ 编码体验有何影响?

【问题讨论】:

标签: c++ c++11


【解决方案1】:

如果你在使用他们,就没有必要害怕......只需忽略他们的可怕性。

如果您制作它们,这意味着您必须使您的迭代器独立于容器的分配器类型,以及不影响迭代器的容器的其他通用参数。

【讨论】:

  • 出于好奇,对于具有非默认分配器的任何给定对象,或者对象可能具有非默认分配器的情况,使用decltype 不是更好吗?而不是依赖于你的编译器是否实现了 SCARY 迭代器?例如,如果您出于某种原因创建了一个std::vector<int, std::allocator<std::string>> vTerribleIdeadecltype(vTerribleIdea)::iterator 将扩展为正确的迭代器,而不管迭代器是否绑定到分配器。 [请参阅ideone.com/MLHhCa,或通过 MSVC 运行它以获得更易读的内容。 ]
  • 我可以看到 SCARY 迭代器如何对预先存在的代码有用,并允许编译器正确处理代码,而无需重写它以考虑非默认迭代器,但它们在以下情况下是否不必要?因为decltype 而编写新的、类型无关的代码,或者使用SCARY 行为而不是使用我不知道的decltype 显式指定迭代器类型有什么好处? [不计算不符合 C++11 的编译器,它们通常不支持 SCARY 迭代器或 decltype。]
【解决方案2】:

来自链接的 PDF,地址为 http://www.open-std.org/jtc1/sc22/WG21/docs/papers/2009/n2911.pdf

首字母缩略词 SCARY 描述了看似错误的赋值和初始化(出现受冲突的泛型参数约束),但实际上使用正确的实现(由于最小化的依赖关系而不受冲突约束)。

【讨论】:

  • +0.5 作为参考(虽然链接不是答案)。 +0.5 用于引用 backronym(尽管没有进一步的上下文,这不是很容易解释)。 -1 表示没有回答问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 2020-06-29
  • 2013-05-30
  • 1970-01-01
  • 2012-11-14
  • 2018-08-16
  • 1970-01-01
  • 2011-02-05
相关资源
最近更新 更多