C++ PPP练习返回多值实现疑问:引用参数回传结果的写法是否正确?
引用参数回传方式的确认
你给出的写法完全符合题目描述的「通过引用参数回传结果」的实现逻辑。这种方式的核心是把要输出的变量以非const左值引用的形式传给函数,函数内部直接修改这些外部变量的取值,无需通过return语句就能把计算结果带出函数作用域,属于C++里非常经典的「输出参数」用法。
不过你的示例代码有个小问题需要注意:calculate函数的第一个参数是vector<double>类型,而main函数里传入的是vector<int>,类型不匹配会触发编译报错。建议把函数的首参数改成const vector<double>& vec,既避免了vector的拷贝开销,也明确表达了函数不会修改原输入数组的语义。
两种多返回值方式的对比与偏好
我更推荐返回自定义结构体的实现方式,原因如下:
- 调用逻辑更简洁:不需要在调用函数前提前声明四个零散的变量,直接用
auto接收返回的结构体即可,代码可读性更高 - 避免参数顺序错误:用引用传参时如果调用时把
min、max、median的顺序写反,编译器不会报错,这类隐性问题排查成本极高;而结构体的成员自带命名,访问时完全不会出现这类低级错误 - 性能几乎无差异:现代C++的返回值优化(RVO)会直接省略返回值的拷贝开销,部分场景下性能甚至比传引用更高
- 接口语义更清晰:计算数组统计量的函数本身的语义就是「输入数组,输出统计结果」,返回结果结构体的写法完全匹配这个语义;而输出参数的写法把输入、输出参数混在一起,接口表意不直观
- 后续处理更方便:如果需要把统计结果传递给其他函数,直接传整个结构体即可,不需要携带四个零散的变量
当然引用传参也有适用场景:比如你需要多次调用计算函数、复用同一个变量的内存空间避免重复分配的时候,输出参数的效率会更高,但绝大多数常规业务场景下,返回结构体的优势更大。
内容的提问来源于stack exchange,提问作者yaelreshet11
相关产品推荐
相关产品推荐

