# C++ in Maguyva: grafi di classi e chiamate per grandi basi di codice

Canonical source: https://maguyva.ai/it/languages/cpp

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva supporta C++ con AST, simboli e grafo, così gli agenti IA seguono classi, namespace, override virtuali e chiamanti in grandi basi di codice C++.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .c, .c++, .cc, .cpp, .cxx, .h, +4 altre
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## Il più adatto per

- Motori di gioco, sistemi di trading, browser e altre grandi basi di codice C++ in cui cambiare un header ricompila mezzo albero.
- Gerarchie di classi con metodi virtuali, in cui il metodo eseguito è definito altrove rispetto al punto di chiamata.
- Refactoring assistiti da agenti che hanno bisogno di chiamanti e override prima di un cambio di firma.

## Workflow degli agenti

- Trovare tutti gli override di un metodo virtuale prima di modificare la classe base.
- Elencare in tutta la base di codice i chiamanti di una funzione o di un metodo di classe con namespace, come `net::Socket::send`.
- Tracciare dove una classe viene costruita con `new` e quali membri tocca dopo.

## Perché C++ richiede struttura, non ricerca testuale

In C++ i nomi non sono unici. `send` può essere una funzione libera, un membro di tre classi e un override in una quarta. Namespace, template e definizioni fuori dalla classe come `Socket::send` in un file `.cpp` distribuiscono un tipo su molti file. La ricerca testuale restituisce ogni corrispondenza, ma non dice a un agente quale raggiunge una chiamata.

Maguyva indicizza classi, membri e chiamate insieme ai loro proprietari, così un agente segue la struttura reale prima di modificare.

## Cosa estrae Maguyva in C++

Maguyva copre le estensioni più comuni di sorgenti e header C++, tra cui `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` e `.hxx`. Vengono estratti classi, struct e funzioni, e una definizione fuori dalla classe come `void Socket::send()` viene attribuita alla classe e al namespace proprietari. I membri virtuali vengono registrati, e i parametri dei template fanno parte delle firme.

La tipizzazione dei receiver segue parametri, dichiarazioni locali, campi, cicli `for` basati su intervallo e `auto`, e guarda attraverso `unique_ptr`, `shared_ptr` e `optional`, così una chiamata come `conn->send()` può essere risolta nella classe giusta. Le clausole di classe base alimentano l'ereditarietà, e le espressioni `new` contano come istanziazione.

Si applica lo stesso mascheramento delle macro di export e annotazione di C. Circa 273 nomi della libreria standard (`std::cout`, `std::endl`, `printf` e simili) vengono filtrati dalle relazioni. Il grafo registra chiamate, include, ereditarietà, override, istanziazione, riferimenti di tipo, letture e scritture, e archi `throw`.

## Esempi di prompt per agenti

- "Quali classi ridefiniscono `Renderer::draw` e chi lo chiama?" (`dependency_search`)
- "Mostrami `OrderBook::match` e tutti i chiamanti." (`find_symbol`)
- "Spiega come un messaggio di dati di mercato raggiunge il motore di strategia." (`get_task_context`)

## Limiti noti

- `.h` compare negli elenchi di estensioni di C, C++ e Objective-C, quindi negli alberi misti C e C++ gli header sono condivisi tra questi profili.
- I corpi delle macro di tipo oggetto non vengono analizzati, e le chiamate ai nomi filtrati della libreria standard non sono archi del grafo. Usa `text_pattern_search` per le macro e gli usi di `std::`.

## Prossimi passi

Collega un repository con la [guida rapida](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Se parte dell'albero è in C puro, leggi anche la [guida a C](/it/languages/c).

## Dettagli del motore

- Le definizioni fuori dalla classe come `void Socket::send()` vengono attribuite alla classe e al namespace proprietari, e i membri virtuali vengono registrati.
- La tipizzazione dei receiver segue parametri, variabili locali, campi, `for` basati su intervallo e `auto`, e guarda attraverso `unique_ptr`, `shared_ptr` e `optional`.
- Le clausole di classe base alimentano l'ereditarietà, le espressioni `new` contano come istanziazione, e circa 273 nomi della libreria standard vengono filtrati dalle relazioni.

## Punti di ingresso MCP utili

- `find_symbol`: Usalo con un nome qualificato come `OrderBook::match` quando ti servono definizione e chiamanti.
- `dependency_search`: Usalo su una classe base o un metodo virtuale per trovare override e chiamanti prima di un cambio di firma.
- `get_task_context`: Usalo per prompt come "spiega come un messaggio di dati di mercato raggiunge il motore di strategia".
