C++ 関数から複数の値を返す 質問する

C++ 関数から複数の値を返す 質問する

C++ 関数から複数の値を返すための推奨される方法はありますか? たとえば、2 つの整数を割り算して商と余りの両方を返す関数を想像してください。よく見かける方法の 1 つは、参照パラメータを使用することです。

void divide(int dividend, int divisor, int& quotient, int& remainder);

バリエーションとしては、1 つの値を返し、もう 1 つの値を参照パラメータ経由で渡す方法があります。

int divide(int dividend, int divisor, int& remainder);

別の方法としては、すべての結果を含む構造体を宣言し、それを返すという方法があります。

struct divide_result {
    int quotient;
    int remainder;
};

divide_result divide(int dividend, int divisor);

これらの方法のいずれかが一般的に好まれますか、それとも他の提案がありますか?

編集: 実際のコードでは、結果が 2 つ以上ある場合があります。また、結果の型が異なる場合もあります。

ベストアンサー1

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;
}

おすすめ記事