这个代码在c ++中是否正确?
list<int> makelist(int litem)
{
list<int> newList;
newList.push_front(litem);
return newList;
}
是否会因按值返回列表(#include <list>
)而产生问题?
答案 0 :(得分:1)
它会起作用,但效率不高,因为可能会复制大量内存。在下一个C ++标准中,可以解决这个问题。 我建议使用以下代码:
void fillList(list & lst) {
lst.push_front(...);
}
....
list newList;
fillList(newList);
答案 1 :(得分:1)
如评论所述,通常会优化返回值(在启用优化时运行)。因此,如果速度是关注点(在探查器已经证明它之前它不应该),你不应该担心。另一方面,如果list在复制时有一些奇怪的副作用,你应该知道复制构造函数调用的数量会因编译器和设置而异。
答案 2 :(得分:-1)
您不能返回非简单类型的本地对象(int,float,char),但您可以返回指向新对象的指针:
list<int>* makelist(int litem)
{
list<int>* newList = new list<int>();
newList->push_front(litem);
return newList;
}
注意你必须管理指针后者以避免内存泄漏。