从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 回答
![?](http://img1.sycdn.imooc.com/545866130001bfcb02200220-100-100.jpg)
回首忆惘然
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;}
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
眼眸繁星
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 关注
- 496 浏览
添加回答
举报
0/150
提交
取消