zoukankan      html  css  js  c++  java
  • 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,这个之后再深入学习。

  • 相关阅读:
    学习心得——day2
    学习心得——day3
    学习心得——day1
    Android JNI so库的开发
    android 删除相册图片并同步到图库
    使用AccessibilityService执行开机自启动
    UDP Server
    uicode编码解码
    GreenDao的使用
    java之并发编程线程池的学习
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14110748.html
Copyright © 2011-2022 走看看