按值和引用返回结构

时间:2013-05-20 13:03:44

标签: c++

我想在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或通过引用致电?”

2 个答案:

答案 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;
}

所以你肯定会使用引用。但是(正如所注意到的)你的代码没有任何意义。你不应该使用匿名结构并解析所有分开的变量。在你的代码中,你为每个函数调用创建了六个指针,而不是一个。

另外,我认为你应该学习更多有关面向对象编程的知识。

相关问题