从C+函数返回多个值是否有从C+函数返回多个值的首选方法?例如,假设一个函数将两个整数除以并返回商和余数。我通常看到的一种方法是使用引用参数:void divide(int dividend, int divisor, int& quotient, int& remainder);变体是返回一个值,并通过一个引用参数传递另一个值:int divide(int dividend, int divisor, int& remainder);另一种方法是声明一个包含所有结果的结构,并返回以下内容:struct divide_result {
int quotient;
int remainder;};divide_result divide(int dividend, int divisor);这些方法中的一种是普遍倾向的,还是有其他的建议?编辑:在现实世界的代码中,可能有两个以上的结果.它们也可能是不同类型的。
3 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
#include <tuple>std::tuple<int, int> divide(int dividend, int divisor) {
return std::make_tuple(dividend / divisor, dividend % divisor);}#include <iostream>int main() {
using namespace std;
int quotient, remainder;
tie(quotient, remainder) = divide(14, 3);
cout << quotient << ',' << remainder << endl;}#include <tuple>std::tuple<int, int> divide(int dividend, int divisor) {
return {dividend / divisor, dividend % divisor};}#include <iostream>int main() {
using namespace std;
auto [quotient, remainder] = divide(14, 3);
cout << quotient << ',' << remainder << endl;}auto divide(int dividend, int divisor) {
struct result {int quotient; int remainder;};
return result {dividend / divisor, dividend % divisor};}#include <iostream>int main() {
using namespace std;
auto result = divide(14, 3);
cout << result.quotient << ',' << result.remainder << endl;
// or
auto [quotient, remainder] = divide(14, 3);
cout << quotient << ',' << remainder << endl;}
眼眸繁星
TA贡献1873条经验 获得超9个赞
在调用中,哪些参数是ins,哪些是Out,这并不总是显而易见的。 通常您必须创建一个局部变量来捕获结果,而返回值则可以内联使用(这可能是一个好主意,也可能不是一个好主意,但至少您有此选项)。 在我看来,有一个“在门”和一个“室外”功能似乎更干净-所有的输入都在这里,所有的输出都在那里。 我喜欢尽量简短地列出我的论点。
pair<double,double> calculateResultingVelocity(double windSpeed, double windAzimuth, double planeAirspeed, double planeCourse);pair<double,double> result = calculateResultingVelocity(25, 320, 280, 90); cout << result.first << endl;cout << result.second << endl;
struct Velocity {
double speed;
double azimuth;};Velocity calculateResultingVelocity(double windSpeed, double windAzimuth,
double planeAirspeed, double planeCourse);Velocity result = calculateResultingVelocity(25, 320, 280, 90);
cout << result.speed << endl;cout << result.azimuth << endl;- 3 回答
- 0 关注
- 555 浏览
添加回答
举报
0/150
提交
取消
