使用 struct
一个 struct
可用于绑定多个返回值:
Version >= C++ 11
struct foo_return_type {
int add;
int sub;
int mul;
int div;
};
foo_return_type foo(int a, int b) {
return {a + b, a - b, a * b, a / b};
}
auto calc = foo(5, 12);
Version < C++ 11
可以使用构造函数来简化构造返回值,而不是分配给单个字段:
struct foo_return_type {
int add;
int sub;
int mul;
int div;
foo_return_type(int add, int sub, int mul, int div)
: add(add), sub(sub), mul(mul), div(div) {}
};
foo_return_type foo(int a, int b) {
return foo_return_type(a + b, a - b, a * b, a / b);
}
foo_return_type calc = foo(5, 12);
可以通过访问 struct
calc
的成员变量来检索函数 foo()
返回的各个结果:
std::cout << calc.add << ' ' << calc.sub << ' ' << calc.mul << ' ' << calc.div << '\n';
输出:
17 -7 60 0
注意:使用 struct
时,返回的值将组合在一个对象中,并可使用有意义的名称进行访问。这也有助于减少在返回值范围内创建的无关变量的数量。
Version >= C++ 17
为了解包从函数返回的 struct
,可以使用结构化绑定 。这样可以使用 in-parameters 将 out 参数置于均匀的基础上:
int a=5, b=12;
auto[add, sub, mul, div] = foo(a, b);
std::cout << add << ' ' << sub << ' ' << mul << ' ' << div << '\n';
此代码的输出与上面的输出相同。struct
仍然用于返回函数中的值。这允许你单独处理字段。