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,这个之后再深入学习。

  • 相关阅读:
    DTS和AC3的区别
    bind出现 file does not end with newline错误
    删除桌面菜单多余项
    you have requested a nonexistent service "grid"
    php 常用函数
    Jquery
    Twig 的Filters学习
    Twig 的 tags学习(中文) 之三 完结
    PHP 正则表达式
    SQL处理字符串
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/14110748.html
Copyright © 2011-2022 走看看