-5

我想在 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还是通过引用调用?”

4

2 回答 2

5

在这两种情况下,差异都可以忽略不计。在您发现它们确实是问题之前,您不应该担心这些问题。简短的回答:做你更喜欢的方式,并考虑不同的方面,比如你以后如何使用返回的值。

如果您通过引用传递参数,那么它们已经在堆栈上或动态分配,并且它们的指向值由函数填充。时间花在复制所有指向堆栈的指针并将它们的地址存储在被调用函数中。

在第二种情况下,整个结构在堆栈上分配并填充(可能由结构中缺少的单个构造函数)。时间花在将对象构造到堆栈上并填充其值。

于 2013-05-20T13:08:48.637 回答
-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;
}

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

另外,我认为您应该了解更多有关面向对象编程的知识。

于 2013-05-20T13:31:03.650 回答