0

这段代码在 C++ 中是否正确?

list<int> makelist(int litem)
{
    list<int> newList;
    newList.push_front(litem);
    return newList;
}

按值返回列表(的#include <list>)是否会产生问题?

4

3 回答 3

1

它会起作用,但效率不高,因为可能会复制大量内存。在下一个 C++ 标准中,这个问题可以得到解决。我建议以下代码:

void fillList(list & lst) {
   lst.push_front(...);
}
....
list newList;
fillList(newList);
于 2011-01-12T10:41:50.913 回答
1

正如所评论的,按值返回通常会被优化掉(在打开优化的情况下运行时)。因此,如果速度是问题(在分析器证明它之前不应该),你不应该担心。另一方面,如果 list 在复制时有一些奇怪的副作用,您应该知道复制构造函数调用的数量会因编译器和设置而异。

于 2011-01-12T10:50:40.777 回答
-1

您不能返回不是简单类型(int、float、char)的本地对象,但可以返回指向新对象的指针:

list<int>* makelist(int litem)
{
    list<int>* newList = new list<int>();
    newList->push_front(litem);
    return newList;
}

注意您必须管理后者以避免内存泄漏。

于 2011-01-12T17:28:07.463 回答