如果我必须从函数返回字符串和数组,哪一个更好。
考虑一下我必须发送字符串" status"和数组" ids"。
struct ReturnValues {
string status;
int ids[10];
};
将其用作:
ReturnValues returnValues;
returnValues = func();
考虑func()返回ReturnValues
的对象如:
int ids[10];
string status = func(ids);
考虑func将id作为引用变量
string func(int& ids) {
//Some code
return status;
}
如:
int ids[10];
string status;
func(ids, status);
考虑func将id和status作为引用变量
void func(int& ids, string& status) {
//some code;
}
答案 0 :(得分:1)
严格来说,从性能的角度来看,如果您这样做,它将为编译器提供最大的优化优势:
ReturnValues returnValues = func();
和
ReturnValues returnValues;
returnValues = func();
做
V1 = {2,9,2,1,1,1,1,1,1,1,1,1,1,1,1} = 25;
V1 = {2,9,1,2,1,1,1,1,1,1,1,1,1,1,1} = 25;
V1 = {2,9,1,1,2,1,1,1,1,1,1,1,1,1,1} = 25;
.........
V1 = {2,1,1,1,1,1,1,8,1,1,1,1,1,1,3} = 25;
会降低效果,因为无法进行返回值优化:http://goo.gl/5Cfmw2
答案 1 :(得分:0)
我肯定会选择第一个版本。修改其参数的函数往往会使代码更难以理解和测试。
如果您担心性能:实际上所有编译器都会在此处使用返回值优化。所以这不应该是一个问题,可能除了在一些奇特的情况下。
答案 2 :(得分:0)
就我个人而言,我可以将它们组合成预定义的struct
或者使用std::pair
或tuple
,如果您不想明确定义它们。我的感觉是,属于一起的东西属于一起(如果你原谅了重言式)。无论哪种方式,如果数组长度固定,我会考虑使用std::array
,如果不是,我会考虑使用std::vector
(或某些集合类型)。我不是{C}类型数组的粉丝,例如type A[10]
我可能只是将它们作为返回值返回,因为它显示了意图"用它中的int和字符串给我一个这样的东西&#34 ;并让编译器对其进行排序