從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 關注
- 530 瀏覽
添加回答
舉報
0/150
提交
取消
