按值返回结构体vs按引用返回结构体
Returning a struct by value vs by reference
我想在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
还是引用调用?"
在这两种情况下,差异可以忽略不计。你不应该担心这些问题,直到你发现它们是真正的问题。简短的回答:按你喜欢的方式做,考虑不同的方面,比如以后如何使用返回值。
如果你通过引用传递参数,那么它们已经在堆栈上或动态分配,并且它们的指向值由函数填充。时间花在将所有指针复制到堆栈中,并将它们的地址存储在被调用函数中。
在第二种情况下,整个结构体在堆栈上分配并填充(可能由结构体中缺少的单个构造函数填充)。将时间用于在堆栈上构造对象并填充其值。
当函数返回大于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;
}
所以你一定要使用引用。但是(正如我注意到的)你的代码毫无意义。您不应该使用匿名结构,并解析分隔的所有变量。在代码中,您为每个函数调用创建了六个指针,而不是一个。
同时,我认为你应该多学习一些面向对象的程序设计。
相关文章:
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- C++ 使用成员函数返回结构体指针属性的值
- 使用 boost::p ython,如何将结构体向量作为字典列表返回给 Python
- 如何使用其他函数返回的值为结构体成员赋值
- 使用 BOOST.python 从 C++ 返回结构体到 Python
- 如何使用结构体作为接口从函数返回指向数组的指针
- 如何从D DLL返回C结构体
- 调用返回结构体的c++ DLL函数
- 返回指向类定义的结构体的指针,多个作用域操作符
- 结构体的vector.size()将返回什么
- 类静态方法返回包含该类对象的结构体
- 按值返回结构体vs按引用返回结构体
- 当从固定结构体中存储的对象构建函数时,c++ lambda构建静态函数返回意外值
- 将返回值赋给结构体(c++)
- 从函数返回结构体时出现问题
- C/ c++在底层按值返回结构体
- 不能返回指向结构体的指针
- c++只赋值函数调用返回的结构体的一部分
- 如何从类库返回一个结构体数组到控制台应用程序
- c++从函数返回一个指向结构体的指针