是否有从 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);
通常首选这些方法之一,还是有其他建议?
编辑:在现实世界的代码中,可能有两个以上的结果。它们也可能属于不同的类型。
最佳答案
在 C++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;
}
在 C++17 中:
#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;
}
关于c++ - 从 C++ 函数返回多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724738/