在函数中,最好使用返回值还是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);
答案 0 :(得分:3)
这取决于主要取决于个人偏好。我通常使用实际的返回值,如果有一个案例我需要乘法返回值,我可以使用参数或者如果有意义,创建一个包含所有返回值的结构,我可以正常返回。
我发现args令人困惑,特别是因为你参与了指针。
答案 1 :(得分:0)
没有一个正确的答案。您首先要考虑的是该特定操作的有意义。在您的示例中,返回新向量作为返回值而不是输出参数是有意义的,因为它是一个数学运算。但是,当您查看像scanf
这样的库函数时,它们会使用值的输出参数并返回“status”值。同样,对于通常使用scanf
的方式,此有意义。
但是,可以有其他考虑因素。请注意,您正在函数体中创建一个“临时”向量,该向量占用堆栈上的空间,当函数返回时,该向量的内容必须复制到目标。在这种情况下,它不值得担心,但如果您正在处理非常大的项目,可能会对性能产生负面影响。在这种情况下,最好使用输出参数并将指针传递给目标。
当你处理构造函数和析构函数时,C ++中的问题会更糟糕,并且简单的返回会在执行很多代码的过程中结束。再次,从有意义开始,但如果您发现自己遇到性能问题,则可能必须使用备用方法。