Structured bindings e if-init in C++17
Descomponga tuple e coppie con structured bindings e usi istruzioni if-init
Structured bindings e if-init in C++17 è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Destrutturazione nel C++ moderno
C++17 ha aggiunto gli structured bindings, un modo chiaro per scomporre tuple, coppie, array e aggregati in singole variabili con nome.
La forma di base
Usi auto [a, b, ...] per dichiarare variabili associate alle parti del valore a destra.
std::pair<std::string, int> p = {"Ada", 30};
auto [name, age] = p;
std::cout << name << " is " << age;Binding durante l'iterazione di una mappa
Il miglioramento più evidente riguarda l'iterazione sulle mappe. Non dovrà più usare it.first e it.second.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << " " << age << "\n";
}Binding per riferimento
Usi auto& per effettuare il binding per riferimento. La modifica dei nomi associati modifica l'oggetto sottostante.
std::pair<int, int> p = {1, 2};
auto& [a, b] = p;
a = 99;
std::cout << p.first; // 99Binding const
Usi const auto& per una destrutturazione in sola lettura senza effettuare copie.
for (const auto& [key, value] : map) {
// read only
}Binding di array e tuple
Funziona con qualsiasi tipo che supporti l'interfaccia tuple-like, inclusi gli array C e std::tuple.
int arr[3] = {1, 2, 3};
auto [x, y, z] = arr;
std::tuple<int, std::string, double> t = {1, "hi", 3.14};
auto [a, s, d] = t;Binding di struct semplici
Può destrutturare qualsiasi struct i cui membri siano pubblici. I nomi vengono dedotti dall'ordine delle dichiarazioni.
struct Point { int x; int y; };
Point pt{3, 4};
auto [x, y] = pt;
std::cout << x << ", " << y;Istruzioni if-init
C++17 ha aggiunto anche le istruzioni di inizializzazione per if e switch. Dichiari una variabile temporanea nell'header: il suo ambito coincide con il corpo di if/switch.
if (auto it = map.find("Ada"); it != map.end()) {
std::cout << it->second;
} else {
std::cout << "not found";
}Combinare entrambe le funzionalità
I binding e le istruzioni if-init funzionano insieme e permettono di scrivere codice elegante.
if (auto [it, inserted] = m.insert({"key", 42}); inserted) {
std::cout << "added";
} else {
std::cout << "already present";
}Durata dei binding
I binding fanno riferimento a sottooggetti di una variabile anonima sottostante. Restano validi fino alla fine dell'ambito che li contiene, con la stessa durata di una normale variabile locale.
Quando NON usare i binding
Se il nome di un membro esprime un significato che il nome del binding perderebbe, preferisca l'accesso esplicito al membro. La leggibilità è più importante della brevità.
Verifica rapida
Quale funzionalità di C++17 permette di iterare su std::map usando componenti con nome per ogni coppia?
Riepilogo
Gli structured bindings destrutturano coppie, tuple, array e struct in variabili con nome. In combinazione con le istruzioni if-init di C++17, rendono molto più chiaro il codice per l'iterazione e la ricerca.
Domande Frequenti
La lezione «Structured bindings e if-init in C++17» è gratuita?
Sì — il testo completo di «Structured bindings e if-init in C++17» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Structured bindings e if-init in C++17»?
Descomponga tuple e coppie con structured bindings e usi istruzioni if-init Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.
Quanto tempo richiede la lezione «Structured bindings e if-init in C++17»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- auto, decltype e deduzione dei tipi
- Range-based for, nullptr ed enum class
- Espressioni lambda: capture, mutable e generiche
- Structured bindings e if-init in C++17