我想在C ++中返回多个值,我有这段代码:
struct returns
{
int row_locs, col_locs;
int row_descriptors, col_descriptors;
double **locs;
double **descriptors;
};
void returns (int &row_locs, int &col_locs, int &row_descriptors, int &col_descriptors, double **locs, double **descriptors)
{
//make some changes in variables
}
问题是“什么消耗更多时间:struct
或通过引用致电?”
答案 0 :(得分:4)
两种情况下的差异都可以忽略不计。在发现它们确实存在问题之前,您不应该担心这些问题。简短的回答:按照你喜欢的方式做,并考虑不同的方面,比如你以后如何使用返回值。
如果您通过引用传递参数,那么它们已经在堆栈上或动态分配,并且它们的指向值由函数填充。花费时间将所有指针复制到堆栈并将其地址存储在被调用函数中。
在第二种情况下,整个结构在堆栈上分配并填充(可能是由结构中缺少的单个构造函数)。将对象构建到堆栈上并填充其值所花费的时间。
答案 1 :(得分:-1)
当函数返回大于long(在x86和其他32位处理器上)或long long(在x86_64和另一个64位架构上)的东西时,它返回指向已分配内存的指针,然后将数据复制到本地结构。
struct example
{
long long a,b,c;
};
example create_new_struct(void)
{
example tmp; //new object is created
tmp.a = 3;
tmp.b = 4;
bmp.c = 5;
return example; //in low-level pointer is returned and all data copied
}
void modify_existing_structure(example & tmp)
{
tmp.a = 3; //setting data directly
tmp.b = 4;
tmp.c = 5;
return;
}
int main(void)
{
example a = create_new_struct(), b; //varaibles are being copied
modify_existing_structure(b); //variables are being set directly
return 0;
}
所以你肯定会使用引用。但是(正如所注意到的)你的代码没有任何意义。你不应该使用匿名结构并解析所有分开的变量。在你的代码中,你为每个函数调用创建了六个指针,而不是一个。
另外,我认为你应该学习更多有关面向对象编程的知识。