C++ Usando struct


Esempio

Una struct può essere utilizzata per raggruppare più valori di ritorno:

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);
C ++ 11

Invece di assegnare singoli campi, è possibile utilizzare un costruttore per semplificare la costruzione di valori restituiti:

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

I singoli risultati restituiti dalla funzione foo() possono essere recuperati accedendo alle variabili membro del calc struct :

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

Produzione:

17 -7 60 0

Nota: quando si utilizza una struct , i valori restituiti vengono raggruppati in un singolo oggetto e accessibili utilizzando nomi significativi. Questo aiuta anche a ridurre il numero di variabili estranee create nell'ambito dei valori restituiti.

C ++ 17

Per decomprimere una struct restituita da una funzione, è possibile utilizzare i collegamenti strutturati . Questo pone i parametri di uscita su un piede uniforme con i parametri in-:

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

L'output di questo codice è identico a quello sopra. La struct è ancora utilizzata per restituire i valori dalla funzione. Questo ti permette di trattare i campi individualmente.