使用 struct

一個 struct 可用於繫結多個返回值:

Version >= C++ 11

struct foo_return_type {
    int add;
    int sub;
    int mul;
    int div;
};

foo_return_type foo(int a, int b) {
    return {a + b, a - b, a * b, a / b};
}

auto calc = foo(5, 12);

Version < C++ 11

可以使用建構函式來簡化構造返回值,而不是分配給單個欄位:

struct foo_return_type {
    int add;
    int sub;
    int mul;
    int div;
    foo_return_type(int add, int sub, int mul, int div)
    : add(add), sub(sub), mul(mul), div(div) {}
};

foo_return_type foo(int a, int b) {
     return foo_return_type(a + b, a - b, a * b, a / b);
}

foo_return_type calc = foo(5, 12);

可以通過訪問 struct calc 的成員變數來檢索函式 foo() 返回的各個結果:

std::cout << calc.add << ' ' << calc.sub << ' ' << calc.mul << ' ' << calc.div << '\n';

輸出:

17 -7 60 0

注意:使用 struct 時,返回的值將組合在一個物件中,並可使用有意義的名稱進行訪問。這也有助於減少在返回值範圍內建立的無關變數的數量。

Version >= C++ 17

為了解包從函式返回的 struct,可以使用結構化繫結 。這樣可以使用 in-parameters 將 out 引數置於均勻的基礎上:

int a=5, b=12;
auto[add, sub, mul, div] = foo(a, b);
std::cout << add << ' ' << sub << ' ' << mul << ' ' << div << '\n';

此程式碼的輸出與上面的輸出相同。struct 仍然用於返回函式中的值。這允許你單獨處理欄位。