将变量引用转换为值?

时间:2014-03-26 19:19:25

标签: c++ debugging

我正在使用list中的STL。要访问,我使用了l.front()l.back()。这两种方法都返回引用。我正在将一个列表的内容复制到其他列表中,所以不要参考。由于方法返回引用,所以我想知道是否有其他方法可以将引用转换为值?我只会收到价值而不是参考。

int main()
{

    list<int> l;
    l.push_back(2);
    l.push_back(5);
    l.push_back(7);
    l.push_back(9);

    while( ! l.empty() )
    {
        cout<<l.front()<<endl;
        l.pop_front();
    }

    list<int> l1;
    l1.push_back(10);
    l1.push_back(15);
    l1.push_back(30);


    l.push_back( l1.front() );   // here I need value not reference.


    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:1)

你的确会获得价值

l.push_back( l1.front() );   // here I need value not reference

因为l1.front()引用的值将用于创建列表l的元素。 无需创建任何仅获取目标值的中间临时对象。:)

试试这个简单的例子

#include <iostream>
#include <list>
#include <cstdlib>


int main()
{
    std::list<int> l;

    std::list<int> l1;

    l1.push_back( 10 );
    l1.push_back( 15 );
    l1.push_back( 30 );

    l.push_back( l1.front() );

    for ( int x : l1 ) std::cout << x << ' ';
    std::cout << std::endl;

    for ( int x : l ) std::cout << x << ' ';
    std::cout << std::endl;

    std::system( "pause" );

    return 0;
}

正如您将看到每个列表包含其自身的值为10的元素。

答案 1 :(得分:0)

看看std::list::push_back。有两个版本采用不同的输入参数:

  1. const T& value:新元素初始化为值的副本。
  2. T&& value:将值移入新元素
  3. 在您的情况下,l1.front()是左值引用T&,因此选择版本1并复制值,这就是您想要的。