在gcc stl中执行std :: begin(为什么两个重载?)

时间:2017-01-22 20:11:35

标签: c++ c++11 gcc stl

在:

C:\ Program Files \ mingw-w64 \ x86_64-6.3.0-posix-seh-rt_v5-rev1 \ mingw64 \ lib \ gcc \ x86_64-w64-mingw32 \ 6.3.0 \ include \ c ++ \ bits \ range_access .H

有以下std :: begin的实现,有两个函数:

  /**
   *  @brief  Return an iterator pointing to the first element of
   *          the container.
   *  @param  __cont  Container.
   */
  template<typename _Container>
    inline auto
    begin(_Container& __cont) -> decltype(__cont.begin())
    { return __cont.begin(); }

  /**
   *  @brief  Return an iterator pointing to the first element of
   *          the const container.
   *  @param  __cont  Container.
   */
  template<typename _Container>
    inline auto
    begin(const _Container& __cont) -> decltype(__cont.begin())
    { return __cont.begin(); }

我的问题是为什么实际需要第二次重载?

这是我用来查找是否遗漏了一些测试代码: http://coliru.stacked-crooked.com/a/148278372ff8da3b

0 个答案:

没有答案