c ++函数中的by-value返回

时间:2011-01-12 10:37:33

标签: c++ pass-by-value

这个代码在c ++中是否正确?

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

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

3 个答案:

答案 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;
}

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