• C++中emplace_back中的完美转发是什么


    1.源代码

    push_back()

    #if __cplusplus >= 201103L
          void
          push_back(value_type&& __x)
          { emplace_back(std::move(__x)); }

    其中传入参数是右值?如果是右值的话就直接调用emplace_back,并且参数是右值。

    也有下面传入引用的版本:

          void
          push_back(const value_type& __x)
          {
        if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
          {
            _GLIBCXX_ASAN_ANNOTATE_GROW(1);
            _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
                         __x);
            ++this->_M_impl._M_finish;
            _GLIBCXX_ASAN_ANNOTATE_GREW(1);
          }
        else
          _M_realloc_insert(end(), __x);
          }

    emplace_back的实现:

          vector<_Tp, _Alloc>::
          emplace_back(_Args&&... __args)
          {
        if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
          {
            _GLIBCXX_ASAN_ANNOTATE_GROW(1);
            _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
                         std::forward<_Args>(__args)...);
            ++this->_M_impl._M_finish;
            _GLIBCXX_ASAN_ANNOTATE_GREW(1);
          }
        else
          _M_realloc_insert(end(), std::forward<_Args>(__args)...);

    传入参数是右值,进行了forward函数进行完美转发?

    https://www.cnblogs.com/qicosmos/p/3376241.html,这个之后再深入学习。

  • 相关阅读:
    hdu1754线段树入门
    hdu1247 字典树模板
    完全背包 poj 1384
    hdu 1541 树状数入门
    hdu 2665 划分树模板
    winhex分析磁盘目录结构(未完待续)
    取出表单中元素的js代码
    c语言检测cpu大小端模式
    firefox的cookie
    c移位实现求余
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14110748.html
Copyright © 2020-2023  润新知