C++ C++;:方法返回List或ref to List作为参数传递:哪个更好

C++ C++;:方法返回List或ref to List作为参数传递:哪个更好,c++,C++,考虑填充列表的方法的两个框架实现: 方法一:方法返回一个列表 std::list<std::string> fillList() { std::list<std::string> result; // fill result return result; } std::list fillList() { std::列表结果; //填充结果 返回结果; } 召集人: std::list<std::string> lst = fil

考虑填充列表的方法的两个框架实现:

方法一:方法返回一个列表

std::list<std::string> fillList()
{
    std::list<std::string> result;

    // fill result

    return result;
}
std::list fillList()
{
std::列表结果;
//填充结果
返回结果;
}
召集人:

std::list<std::string> lst = fillList();
std::list<std::string> lst;
fillList(lst);
std::list lst=fillList();
方法二:将ref传递给list的方法:

void fillList(std::list<std::string>& result)
{     
    // fill result

}
void fillList(标准::列表和结果)
{     
//填充结果
}
召集人:

std::list<std::string> lst = fillList();
std::list<std::string> lst;
fillList(lst);
std::list lst;
填充列表(lst);
对我来说,方法1(返回列表)似乎更优雅,但效率似乎较低,因为结果必须在方法返回时复制,这并不好,因为返回的列表可能非常大。我选择一个列表作为示例,而不是一个简单的对象,因为列表大小可能会有很大的变化


什么是最佳实践?

没有最佳实践。它完全取决于您的实际用例和上下文,应该首选哪种形式。第一种方法可能涉及额外的复制操作,但这实际上是特定于编译器的。。。你不搜索吗?为什么只搜索一个?也许这两种方法都是可取的,所以您可以提供重载。为什么只停留在两个位置,同时在混合中添加
std::list&fillList(std::list&)
。这样做没有最佳实践。它完全取决于您的实际用例和上下文,应该首选哪种形式。第一种方法可能涉及额外的复制操作,但这实际上是特定于编译器的。。。你不搜索吗?为什么只搜索一个?也许这两种方法都是可取的,所以您可以提供重载。为什么只停留在两个位置,同时将std::list和fillList(std::list&)添加到组合中。