C++函数如何同时返回两个值?现有求和求积函数仅返回单个值
问题原因
C++原生语法不支持单个函数同时返回多个值:
- 你代码中
return sum, product;使用了逗号运算符,只会返回逗号最右侧的表达式结果,本质上这种写法本身就无法实现多返回值,你当前只拿到和属于逗号表达式求值顺序导致的偶然结果。 - 额外添加多个return语句也无法解决问题,函数执行到第一个return语句就会直接退出,后续逻辑不会运行。
可行解决方案
以下是C++实现多值返回的3种常用方案:
- 方案1:通过引用传参带出结果
这是兼容性最高、最常用的实现方式,通过引用参数直接修改外部传入的变量,不需要额外定义结构:
#include <iostream> using namespace std; // sum和product为引用参数,函数内修改会直接同步到外部变量 void Product_Sum(int x, int y, int z, int& sum, int& product) { sum = x + y + z; product = x * y * z; } int main() { int sum, product; int x = 5, y = 10, z = 15; Product_Sum(x, y, z, sum, product); cout << "和:" << sum << ",积:" << product << endl; return 0; }
- 方案2:返回自定义结构体
适合返回值关联度高、需要封装的场景,逻辑可读性更强:
#include <iostream> using namespace std; // 自定义结构体封装两个返回结果 struct CalcResult { int sum; int product; }; CalcResult Product_Sum(int x, int y, int z) { CalcResult res; res.sum = x + y + z; res.product = x * y * z; return res; } int main() { int x = 5, y = 10, z = 15; CalcResult res = Product_Sum(x, y, z); cout << "和:" << res.sum << ",积:" << res.product << endl; return 0; }
- 方案3:C++11及以上版本返回
std::pair/std::tuple
不需要自定义结构体,直接使用标准库提供的容器实现,写法更简洁:
#include <iostream> #include <utility> // std::pair头文件 using namespace std; pair<int, int> Product_Sum(int x, int y, int z) { int sum = x + y + z; int product = x * y * z; return {sum, product}; // C++11及以上支持列表初始化返回 } int main() { int x = 5, y = 10, z = 15; auto res = Product_Sum(x, y, z); cout << "和:" << res.first << ",积:" << res.second << endl; // C++17及以上还可以用结构化绑定简化写法:auto [sum, product] = Product_Sum(x,y,z); return 0; }
内容的提问来源于stack exchange,提问作者Emad
相关产品推荐
相关产品推荐

