调用一个方法C++
问题描述:
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()后它不会被保存。这是为什么?
答
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
答
list_sorter add(std::list<typeOfList> &list) {
...
return *this;
}
由于该函数返回一个值,而不是一个参考,它修改对象,然后返回所述对象的副本。随后的调用发生在副本上。之后,该副本被销毁,因为您从未将其分配给变量。
解决办法是:
+0
谢谢!引用/指针总是欺骗我。下次我会更加小心。 – Shaq
变化从'list_sort'到'list_sort&' – Amadeus
在调试器步骤通过返回类型,看什么'this'是。作为一个说明,这种风格与'X()。Y()Z()'被称为 “链接”。 – tadman