如何让函数返回临时对象时减少不必要的构造
//-------------------------------------List<String> GetListObj(){ //第一次 构造临时对象 List<String> strList; for (int i = 0; i<= 99; i++) { strList.Add(String(T("rrrfff"))); } //for //第二次 复制一份临时对象 析构原来的临时对象 return strList;}//-------------------------------------void Test_GetListbj(){ List<String> obj = GetListObj();//第三次 把返回的临时对象复制(构造)局部对象 析构返回的临时对象 List<String> &obj2 = GetListObj();//和第三次一样 List<String> &&obj3 = GetListObj();//和第三次一样}//-------------------------------------bool GetListObj(List<String>& strList){ //第一次 构造临时对象 for (int i = 0; i<= 99; i++) { strList.Add(String(T("rrrfff"))); } //for //第二次 复制一份临时对象 析构原来的临时对象 return true;}
[解决办法]
List<String> GetListObj()
{
//第一次 构造临时对象
List<String> strList;
for (int i = 0; i<= 99; i++)
{
strList.Add(String(T("rrrfff")));
} //for
//第二次 复制一份临时对象 析构原来的临时对象
return strList;
}
// ------------------------------------------------------
你可以把List<String> &strList;作为参数,按引用传递
void GetListObj(List<String> &strList)
{
for (int i = 0; i<= 99; i++)
{
strList.Add(String(T("rrrfff")));
} //for
}
[解决办法]
List中木有转移构造函数(move constructor)吗
[解决办法]
这个问题我也问过.
得出的结论是:
1.NRV
2.c++11 的move 语义
3.http://en.wikipedia.org/wiki/Expression_templates
4.等等
[解决办法]