Documentazione C++
Guida di riferimento a C++ concisa e ricca di esempi. Leggi il concetto, guarda il codice e poi mettilo in pratica in un percorso Coddy.
Inizia un percorso guidato di C++Getting Started
- Cos'è il C++Cos'è davvero il C++, perché viene compilato direttamente in codice macchina nativo e che tipo di software ad alte prestazioni si costruisce con esso.
- Hello WorldIl programma Hello World in C++ spiegato riga per riga: #include <iostream>, int main(), std::cout e <<, std::endl contro '\n', return 0, più come compilarlo e correggere i primi errori dei principianti.
- Installare C++Come installare un compilatore C++ (GCC, Clang o MSVC), scegliere la toolchain giusta per il tuo sistema operativo e verificare che funzioni da riga di comando.
- Compilare il C++Come il C++ trasforma un sorgente .cpp in un eseguibile nativo: compila con g++ (o clang++/MSVC), esegui il binario e leggi gli errori del compilatore quando qualcosa va storto.
- Sintassi del C++Le regole di base della sintassi di un programma C++, cioè istruzioni e punto e virgola, blocchi tra graffe, la funzione main e il funzionamento dell'output, spiegate a partire da un primo programma.
- CommentiCome scrivere commenti in C++, dalle note su una riga // ai blocchi su più righe /* */, più come commentare codice, perché i commenti a blocco non si annidano e cosa rende un commento degno di essere tenuto.
Variables & Types
- VariabiliCome funzionano le variabili in C++: dichiararle con un tipo, la differenza tra assegnazione e inizializzazione, l'inizializzazione con le graffe, le regole per i nomi e lo scope che decide dove una variabile vive e muore.
- Tipi di datoUna panoramica pratica dei tipi di dato fondamentali del C++, cioè interi, virgola mobile, char e bool, più dimensioni, signed e unsigned, letterali e suffissi, overflow e come scegliere il tipo giusto.
- Parola chiave autoCome la parola chiave `auto` permette al compilatore di dedurre per te il tipo di una variabile: cosa elimina, dove dà il meglio e le insidie che colpiscono i principianti.
- Costanti e constCome dichiarare valori di sola lettura in C++ con const, la differenza tra const e constexpr, puntatori const e puntatori a const, e le funzioni membro const.
- OperatoriImpara gli operatori in C++: aritmetici, di confronto, logici, di assegnazione e bit a bit, più le trappole su divisione intera, precedenza e valutazione a cortocircuito.
- Type castingCome funziona il type casting in C++: conversioni implicite, la trappola della divisione intera e i quattro cast con nome (static_cast, const_cast, reinterpret_cast, dynamic_cast), con le insidie che causano perdite di dati silenziose.
Control Flow
- if-elseCome prendere decisioni in C++ con if, else if ed else: condizioni, catene di rami, annidamento, operatore ternario, if con inizializzatore e le trappole in cui cadono in molti.
- switchL'istruzione switch del C++ spiegata: etichette case, break e fall-through, il ramo default, raggruppare i case, lo switch sugli enum e le insidie delle dichiarazioni dentro i case.
- Ciclo forCome ripetere del codice con il ciclo for del C++: l'intestazione in tre parti, contare in avanti e all'indietro, scorrere gli array, i cicli annidati, break e continue, e gli errori di uno e degli unsigned che colpiscono tutti.
- Cicli whileIl ciclo while del C++ spiegato: il while che controlla prima la condizione, il do-while che viene eseguito almeno una volta, i cicli fino a un valore sentinella, break e continue, e come evitare i cicli infiniti.
- for basato su rangeIl ciclo for basato su range di C++ spiegato: iterazione pulita su array, vector, stringhe e map, perché usare auto& e const auto&, e le trappole di copie e iteratori invalidati da evitare.
Functions
- FunzioniCome scrivere funzioni in C++: l'anatomia con tipo di ritorno, nome e parametri, dichiarazioni e definizioni, restituire valori, funzioni void e insidie come i return mancanti e i prototipi dimenticati.
- Parametri delle funzioniCome arrivano gli argomenti alle funzioni C++: passaggio per valore e per riferimento, riferimenti const per un accesso economico in sola lettura, argomenti predefiniti, puntatori e le insidie delle copie che rallentano i programmi in silenzio.
- RiferimentiI riferimenti in C++ spiegati: come la & in un parametro crea un alias, perché il passaggio per riferimento evita le copie e permette a una funzione di modificare le variabili del chiamante, quando usare const& e riferimenti vs valori restituiti.
- Overloading delle funzioniL'overloading delle funzioni in C++ permette a più funzioni di condividere lo stesso nome, purché le liste dei parametri siano diverse. Scopri come la risoluzione dell'overload sceglie la corrispondenza, perché il solo tipo di ritorno non conta e le trappole di ambiguità e argomenti predefiniti da evitare.
- LambdaScrivi al volo piccole funzioni inline con le lambda di C++: la sintassi, come funzionano le catture, quando usare `mutable` e la trappola della cattura pendente in cui cadono tutti.
Pointers & Memory
- PuntatoriI puntatori in C++ spiegati da zero: dichiarare un puntatore, gli operatori & (indirizzo) e * (dereferenziazione), nullptr, puntatori ad array e le trappole dei puntatori pendenti e non inizializzati che causano crash.
- Riferimenti vs puntatoriUn confronto pratico tra riferimenti e puntatori in C++: cosa hanno in comune, dove differiscono (riassegnazione, null, aritmetica) e una regola chiara per scegliere quale usare nel codice di tutti i giorni.
- Memoria dinamicaCome allocare memoria a runtime con `new`, liberarla con `delete` ed evitare i memory leak, i puntatori pendenti e i double free che arrivano quando gestisci l'heap a mano.
- Smart pointerGli smart pointer possiedono memoria dell'heap e la liberano automaticamente. Impara `unique_ptr`, `shared_ptr`, `make_unique` e `make_shared`, e perché non dovresti quasi mai più scrivere `new`/`delete`.
Strings & I/O
- StringheCome usare `std::string` in C++: costruire, unire, cercare e ritagliare testo in sicurezza, più il motivo per cui quasi mai vorrai un `char*` grezzo nel lavoro vero.
- Input e outputCome funziona l'I/O da console in C++: stampare con cout, leggere con cin, il classico bug del ritorno a capo con getline dopo cin e come recuperare quando l'input fallisce.
- std::getlineCome std::getline legge una riga intera in una std::string: usarlo con cin, perché restituisce una stringa vuota dopo cin >>, le soluzioni con cin.ignore e std::ws, delimitatori personalizzati e lettura di un file riga per riga fino alla fine.
- String streamCome usare std::stringstream, istringstream e ostringstream per analizzare testo, dividere stringhe sugli spazi, convertire tra stringhe e numeri e costruire stringhe formattate in memoria.
STL Containers
- ArrayGli array classici del C++ spiegati: come dichiararli e inizializzarli, usare gli indici in sicurezza, scorrerli conoscendone la dimensione, la trappola del decadimento a puntatore e perché std::array e vector di solito sono migliori.
- vectorstd::vector è l'array ridimensionabile del C++, il contenitore da usare di default. Impara a creare, leggere, far crescere e scorrere un vector, più le insidie dell'invalidazione degli iteratori e degli accessi fuori dai limiti.
- mapLa std::map di C++ spiegata: un container chiave-valore ordinato con ricerca logaritmica. Inserisci, cerca, itera ed evita la classica trappola di operator[] che inserisce chiavi senza avvisare.
- unordered_mapImpara std::unordered_map in C++, la versione con tabella hash di map che offre inserimento e ricerca in O(1) medio. Operazioni di base, l'insidia dell'inserimento automatico con [], count e find a confronto, e quando sceglierla al posto di una map ordinata.
- setCome std::set memorizza in C++ valori unici e ordinati automaticamente: inserire, verificare la presenza con count e find, iterare in ordine e le differenze tra set, multiset e unordered_set.
- pair e tupleCome `std::pair` e `std::tuple` riuniscono due o più valori in un solo oggetto: crearli, accedere ai campi, structured binding e quando usare l'uno o l'altro.
- IteratoriCome funzionano gli iteratori in C++ come puntatori generalizzati dentro i container: begin() ed end(), dereferenziazione, avanzamento, le varianti const e reverse, e le trappole di invalidazione e dereferenziazione di end() che causano undefined behavior.
STL Algorithms & Templates
- AlgoritmiUsa gli algoritmi standard del C++, come `find`, `count_if`, `transform`, `accumulate` e `remove`, per lavorare sui range senza scrivere cicli a mano, più le insidie delle coppie di iteratori e di erase-remove.
- OrdinamentoOrdina vector e array in C++ con `std::sort`: ordine predefinito, comparatori personalizzati, ordinare struct in base a un campo e la trappola dello strict weak ordering che causa crash.
- TemplateScrivi il codice una volta sola e fallo funzionare con ogni tipo grazie ai template del C++: template di funzione, template di classe, deduzione dei tipi e i confusi errori di compilazione che provocano.
Classes & Objects
- ClassiScopri come le classi del C++ riuniscono dati e comportamento in tipi riutilizzabili: dichiarare variabili membro e metodi, creare oggetti, la divisione tra public e private e insidie come i membri non inizializzati e il puntatore this.
- CostruttoriUn costruttore è la funzione membro speciale che viene eseguita quando si crea un oggetto. Scopri i costruttori di default, parametrizzati e di copia, le liste di inizializzazione dei membri e come evitare oggetti inizializzati a metà.
- DistruttoriUn distruttore viene eseguito automaticamente quando un oggetto viene distrutto. Scopri la sintassi `~ClassName()`, quando scatta, perché libera le risorse e la Regola del Tre/Cinque.
- EreditarietàScopri come l'ereditarietà in C++ permette a una classe derivata di riusare ed estendere una classe base: la sintassi, ereditarietà public vs private, l'ordine di costruttori e distruttori e le trappole come l'object slicing.
- Funzioni virtualiLe funzioni virtuali permettono a un puntatore alla classe base di chiamare a runtime la versione di un metodo della classe derivata. Impara `virtual`, `override`, le classi astratte e perché il distruttore della base deve essere virtuale.
- Overloading degli operatoriL'overloading degli operatori in C++ permette ai tuoi tipi di funzionare con operatori predefiniti come +, == e <<. Impara le regole membro vs non membro, come ridefinire gli operatori di confronto e di stream e le trappole su tipi di ritorno e operatore di assegnazione.
- Specificatori di accessoCome public, private e protected decidono chi può toccare i membri di una classe in C++: la base dell'incapsulamento, con getter, setter e la via d'uscita friend.
- StructLe struct del C++ spiegate: come riunire variabili correlate in un unico tipo, dichiarare e inizializzare oggetti struct, dare a una struct funzioni membro e costruttori, e in cosa struct differisce davvero da class.
- EnumImpara gli enum del C++: come dichiararli, perché l'enum class con scope è più sicuro dell'enum semplice, valori personalizzati, switch sugli enumeratori e conversione da e verso interi.
Errors & Debugging
- EccezioniLe eccezioni segnalano errori che una funzione non può gestire da sola. Scopri come usare `throw`, quali sono i tipi di eccezione standard, il messaggio di `what()` e perché le eccezioni battono i codici di ritorno per gli errori che contano.
- try-catchRacchiudi il codice rischioso in `try` e reagisci in `catch`. Impara a catturare le eccezioni per riferimento const, ordinare più gestori, usare `catch (...)` e rilanciare, senza perdere risorse.
- Undefined behaviorL'undefined behavior (UB, comportamento indefinito) è codice su cui lo standard C++ non stabilisce alcuna regola: può crashare, corrompere i dati o sembrare funzionare. Scopri le cause più comuni, perché "ha funzionato" non dimostra nulla e gli strumenti che scovano l'UB.