作为参数或使用返回值

时间:2013-04-03 11:45:45

标签: c

在函数中,最好使用返回值还是out参数?有一种方式优于另一种方式吗?在C.

vec_t是一个struct(typedef):

typedef struct {
    float   x, y, z;
} vec_t;

void multiply_vectors(vec_t* v1, vec_t* v2, vec_t* out) {
    ...
}

vec_t result;
multiply_vectors(&first, &second, &result);

vec_t multiply_vectors(vec_t* v1, vec_t* v2) {
    vec_t v;
    ...
    return v;
}

vec_t result = multiply_vectors(&first, &second);

2 个答案:

答案 0 :(得分:3)

这取决于主要取决于个人偏好。我通常使用实际的返回值,如果有一个案例我需要乘法返回值,我可以使用参数或者如果有意义,创建一个包含所有返回值的结构,我可以正常返回。

我发现args令人困惑,特别是因为你参与了指针。

答案 1 :(得分:0)

没有一个正确的答案。您首先要考虑的是该特定操作的有意义。在您的示例中,返回新向量作为返回值而不是输出参数是有意义的,因为它是一个数学运算。但是,当您查看像scanf这样的库函数时,它们会使用值的输出参数并返回“status”值。同样,对于通常使用scanf的方式,此有意义

但是,可以有其他考虑因素。请注意,您正在函数体中创建一个“临时”向量,该向量占用堆栈上的空间,当函数返回时,该向量的内容必须复制到目标。在这种情况下,它不值得担心,但如果您正在处理非常大的项目,可能会对性能产生负面影响。在这种情况下,最好使用输出参数并将指针传递给目标。

当你处理构造函数和析构函数时,C ++中的问题会更糟糕,并且简单的返回会在执行很多代码的过程中结束。再次,从有意义开始,但如果您发现自己遇到性能问题,则可能必须使用备用方法。