我有一个函数返回这样的数组:
vector<string> GetString()
{
vector<string> s;
s.push_back("one");
s.push_back("two");
s.push_back("three");
return s;
}
我这样称呼它:
vector<string> mystrings=GetStrings();
我也可以如下实现:
void GetString(vector<string> & s)
{
s.push_back("one");
s.push_back("two");
s.push_back("three");
}
并以这种方式调用它:
vector<string> mystrings;
GetStrings(mystrings);
哪一个更好?
版本一将向量复制到另一向量吗?如果是,那么向量很大就很慢。
哪一个更好?
他们做不同的事情。如果您想要一个仅包含这些字符串的向量,请使用第一个;否则,请使用第一个。如果您希望能够将这些字符串附加到现有矢量上,请使用第二个。
如果您想要第一个版本的语义,那么从更容易正确使用和更难于错误使用的意义上说,这“更好”。
版本一将向量复制到另一向量吗?
在现代C ++中,绝对不是:返回局部变量和从临时变量初始化都是通过移动而不是复制来完成的。即使您使用的是C ++ 11之前的编译器,也应删除两个副本。如果您的编译器不支持移动语义或复制省略,那么您确实应该将其丢弃。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句