C++ 将变量引用转换为值?

C++ 将变量引用转换为值?,c++,debugging,C++,Debugging,我正在使用STL中的list。为了访问,我使用了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);

我正在使用
STL
中的
list
。为了访问,我使用了
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;
}
intmain()
{
清单l;
l、 推回(2);
l、 推回(5);
l、 推回(7);
l、 推回(9);
而(!l.empty())
{

你确实会得到价值

l.push_back( l1.front() );   // here I need value not reference
因为
l1.front()
引用的值将用于创建list
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;
}
#包括
#包括
#包括
int main()
{
std::列表l;
std::列表l1;
l1.推回(10);
l1.推回(15);
l1.推回(30);
l、 向后推(l1.前());
对于(intx:l1)std::cout请看一看。有两个版本采用不同的输入参数:

  • const T&value
    :新元素初始化为value的副本
  • T&&value
    :值被移动到新元素中

  • 在您的例子中,
    l1.front()
    是一个左值引用
    T&
    ,因此选择版本1并复制该值,这是您想要的。

    您是否运行或调试了它以查看结果?您收到了一个引用,但
    push\u back
    函数正好采用了它,所以没有问题。是的。list
    l
    现在只有10个。@faranwath but push\u back()也会删除所有以前推送的整数。为什么会这样?@user3461957您刚才不是
    pop\u front
    ed了它们吗?