可能重复:
如何在 C++ 中“返回一个对象”
假设有一个函数 func_foo 可以对给定的数据集进行一些计算,并在处理一些数字后得出需要返回给调用者的结果。将指针传递给结果变量是否有任何奖励(性能方面),并且它在函数与返回值的函数中得到修改 - 除了 Char* 和结构类型结果的便利性/实用性之外。
在发布问题之前,我对此查询进行了初步搜索,但找不到任何相关内容。如果存在相关讨论,请指出我。
可能重复:
如何在 C++ 中“返回一个对象”
假设有一个函数 func_foo 可以对给定的数据集进行一些计算,并在处理一些数字后得出需要返回给调用者的结果。将指针传递给结果变量是否有任何奖励(性能方面),并且它在函数与返回值的函数中得到修改 - 除了 Char* 和结构类型结果的便利性/实用性之外。
在发布问题之前,我对此查询进行了初步搜索,但找不到任何相关内容。如果存在相关讨论,请指出我。
作为常见的建议,以最容易阅读的方式对其进行编码。仅当分析表明这是一个瓶颈时才改变这种方式。
除非您打算返回一个可能需要复制的大结构,否则差异很小。即使在大结构的情况下,如果编译器很聪明,当您查看生成的代码时,两者在本质上是等价的。
大多数编译器使用寄存器来返回适合寄存器的值,这非常快。因此,对于这样的值,我无法想象使用指针返回值是一种优势的情况。
最后,将错误代码作为函数值返回是一种常见的 C 约定。因此,在这种情况下,使用指向内存的指针来返回值也很常见。使用此约定的 API 往往是统一的,因此易于使用。
非常简单的例子:
struct list_s {
int size;
struct element_s *array;
}
int initialize_list(struct list_s *list, int size)
{
int err_code = 0;
// do the intialization of *list, setting err_code if something goes wrong
list->array = malloc(size * sizeof(struct element_s));
if (list->array)
list->size = size;
else {
size = 0;
err_code = ERR_OUT_OF_MEMORY;
}
return err_code;
}