首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >std::forward_iterator_tag的作用是什么?

std::forward_iterator_tag的作用是什么?
EN

Stack Overflow用户
提问于 2013-07-02 18:12:13
回答 5查看 4.5K关注 0票数 8

在分析应用程序时,我遇到了与gcc 4.7.1一起提供的标准库实现部分。它是include/g++-v4/bits/vector.tcc

代码语言:javascript
复制
template<typename _Tp, typename _Alloc>
template<typename _ForwardIterator>
  void
  vector<_Tp, _Alloc>::
    _M_range_insert(iterator __position, _ForwardIterator __first,
          _ForwardIterator __last, std::forward_iterator_tag)
  {
     …
  }

我注意到函数签名的最后一个参数只是一个标记,我开始想知道它为什么会出现在这里。快速浏览一下this page就会发现std::forward_iterator_tag是一个空结构。它在这里的作用是什么?显然,它对函数是无用的,它可能会浪费一个寄存器或堆栈上的一些空间。那为什么呢?

EN

Stack Overflow用户

发布于 2013-07-02 18:23:00

它是模板元编程机制的一部分,它用于根据参数的特征选择适当的重载,例如,如果你有随机访问迭代器,你可以利用它来检查它们之间的距离,并在插入之前保留。另一方面,如果你只有正向迭代器,检查距离将是O(n),所以你不这样做,只需向后推,这可能会导致多次重新定位,因此速度会更慢。此外,编译器会优化出这些空结构,因此没有运行时损失。

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17422915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档