0Pricing
C++ Academy · Lezione

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;   // 99

Binding 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

  1. auto, decltype e deduzione dei tipi
  2. Range-based for, nullptr ed enum class
  3. Espressioni lambda: capture, mutable e generiche
  4. Structured bindings e if-init in C++17
← Torna a C++ Academy