【问题标题】:C++ STL list's Push_back takes argument pass by value?C++ STL 列表的 Push_back 需要按值传递参数吗?
【发布时间】:2014-04-22 15:48:56
【问题描述】:

c++ STL::list 的 push_back 函数将参数作为 pass-by-value 。但是当参数超出范围时仍然能够访问列表的元素。

 typedef std::list<MyObject> mylist;
 void function1()
 {
     MyObject obj;<<<< local scope
    ...
     mylist.push_back(obj);
 }

void function2()
{

//On Iterating the list "mylist" able to access objs in the list properly even though the scope of obj is lost in function1.

}

【问题讨论】:

  • No.
  • Google 应该遥遥领先 Stack Overflow 出现在您的“从哪里获得帮助”的优先列表中。但是,既然您询问了 STL,no, it's passed by const referencestandard library 也是如此。
  • 对不起可能是问题不完整!我很困惑,因为原型正在引用,但我仍然能够访问列表元素,而参数失去了它们的范围!

标签: c++ stl


【解决方案1】:
void push_back (const value_type& val);
void push_back (value_type&& val);

第一个签名接受一个 const 引用,但会复制它。第二个采用右值引用并将其移动。

来源:http://www.cplusplus.com/reference/list/list/push_back/

【讨论】:

    【解决方案2】:

    函数签名是

    void push_back (const value_type& val);
    

    并且传递的值被复制到您的列表中。因此,您可以将其视为“按值传递”(以操作方式)。 在 C++11 中你也有

    void push_back (value_type&& val);
    

    这是将您的价值转移到您的列表中的可能性。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-20
        • 1970-01-01
        • 2011-01-20
        • 2023-03-10
        • 1970-01-01
        • 2017-08-12
        • 2020-09-28
        • 1970-01-01
        相关资源
        最近更新 更多