2017-06-22 108 views
2
list_sorter add(std::list<typeOfList> &list){ 
    list_num++; 
    lp.insert(lp.end(), list.begin(), list.end()); 
    lp.sort(); 
    list.clear(); 
    std::cout << list_num << std::endl; 
    return *this;} 

的方法我有一个类模板这个小方法,主要我这样称呼它:调用一个方法C++

si.add(lc).add(lb); 

两个时候也得到执行,这COUTS增加list_num,但在第二次add()后它不会被保存。这是为什么?

+0

变化从'list_sort'到'list_sort&' – Amadeus

+0

在调试器步骤通过返回类型,看什么'this'是。作为一个说明,这种风格与'X()。Y()Z()'被称为 “链接”。 – tadman

回答

2

add按值返回,这意味着它会返回一个新的临时list_sorter复制自*this,并且临时与原始对象无关。

你可以改变它返回按引用。即

list_sorter& add(std::list<typeOfList> &list){ 
    list_num++; 
    lp.insert(lp.end(), list.begin(), list.end()); 
    lp.sort(); 
    list.clear(); 
    std::cout << list_num << std::endl; 
    return *this; 
} 
+0

谢谢!那很容易。我应该已经知道了,我是新来的C++,它需要时间来习惯引用/指针。 – Shaq

0
list_sorter add(std::list<typeOfList> &list) { 
    ... 
    return *this; 
} 

由于该函数返回一个值,而不是一个参考,它修改对象,然后返回所述对象的副本。随后的调用发生在副本上。之后,该副本被销毁,因为您从未将其分配给变量。

解决办法是:

​​
+0

谢谢!引用/指针总是欺骗我。下次我会更加小心。 – Shaq