0

可能重复:
如何在 C++ 中“返回一个对象”

假设有一个函数 func_foo 可以对给定的数据集进行一些计算,并在处理一些数字后得出需要返回给调用者的结果。将指针传递给结果变量是否有任何奖励(性能方面),并且它在函数与返回值的函数中得到修改 - 除了 Char* 和结构类型结果的便利性/实用性之外。

在发布问题之前,我对此查询进行了初步搜索,但找不到任何相关内容。如果存在相关讨论,请指出我。

4

1 回答 1

1

作为常见的建议,以最容易阅读的方式对其进行编码。仅当分析表明这是一个瓶颈时才改变这种方式。

除非您打算返回一个可能需要复制的大结构,否则差异很小。即使在大结构的情况下,如果编译器很聪明,当您查看生成的代码时,两者在本质上是等价的。

大多数编译器使用寄存器来返回适合寄存器的值,这非常快。因此,对于这样的值,我无法想象使用指针返回值是一种优势的情况。

最后,将错误代码作为函数值返回是一种常见的 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;
}
于 2012-11-20T01:12:47.950 回答