0

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

vec_t 是一个结构(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);
4

2 回答 2

3

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

我发现 args 令人困惑,尤其是因为您涉及指针。

于 2013-04-03T11:47:42.643 回答
0

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

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

当您处理构造函数和析构函数时,C++ 中的问题会更糟一些,并且一个简单的返回最终会在后台执行大量代码。再次,从有意义的开始,但如果您发现自己遇到性能问题,您可能不得不使用另一种方法。

于 2013-04-03T13:03:08.987 回答