# C++ no Maguyva: grafos de classes e chamadas para grandes bases

Canonical source: https://maguyva.ai/pt-br/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).

O Maguyva oferece suporte a C++ com AST, símbolos e grafo, para que agentes de IA sigam classes, namespaces, sobrescritas virtuais e chamadores em grandes bases C++.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .c, .c++, .cc, .cpp, .cxx, .h, +4 mais
- Parsing real de AST para busca com consciência de sintaxe e contexto estrutural.
- Símbolos nomeados alimentam a busca semântica e as referências cruzadas. A navegação por grafo fica disponível quando a extração de relações está habilitada.
- Esta linguagem fornece símbolos e relações para a busca orientada por grafo; os tipos de aresta compatíveis variam de acordo com seus construtos nativos.
- A análise de AST e a extração de símbolos estão disponíveis.

## Uso ideal

- Engines de jogos, sistemas de trading, navegadores e outras grandes bases C++ em que mudar um header recompila metade da árvore.
- Hierarquias de classes com métodos virtuais, em que o método executado é definido em outro lugar que não o da chamada.
- Refatorações assistidas por agentes que precisam de chamadores e sobrescritas antes de uma mudança de assinatura.

## Fluxos de trabalho de agente

- Encontrar todas as sobrescritas de um método virtual antes de mudar a classe base.
- Listar na base de código inteira os chamadores de uma função ou método de classe com namespace, como `net::Socket::send`.
- Rastrear onde uma classe é construída com `new` e quais membros ela toca em seguida.

## Por que C++ precisa de estrutura, e não de busca textual

Em C++, nomes não são únicos. `send` pode ser uma função livre, um membro de três classes e uma sobrescrita em uma quarta. Namespaces, templates e definições fora da classe, como `Socket::send` em um arquivo `.cpp`, espalham um tipo por muitos arquivos. A busca textual devolve todas as correspondências, mas não diz a um agente qual delas uma chamada alcança.

O Maguyva indexa classes, membros e chamadas com seus donos, para que um agente siga a estrutura real antes de editar.

## O que o Maguyva extrai em C++

O Maguyva cobre as extensões comuns de fontes e headers C++, incluindo `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` e `.hxx`. Classes, structs e funções são extraídas, e uma definição fora da classe como `void Socket::send()` é atribuída à classe e ao namespace donos. Membros virtuais são registrados, e parâmetros de template fazem parte das assinaturas.

A tipagem de receivers segue parâmetros, declarações locais, campos, loops `for` baseados em intervalo e `auto`, e enxerga através de `unique_ptr`, `shared_ptr` e `optional`, então uma chamada como `conn->send()` pode ser resolvida para a classe certa. Cláusulas de classe base alimentam a herança, e expressões `new` contam como instanciação.

Vale o mesmo mascaramento de macros de exportação e anotação do C. Cerca de 273 nomes da biblioteca padrão (`std::cout`, `std::endl`, `printf` e semelhantes) são filtrados das relações. O grafo registra chamadas, includes, herança, sobrescritas, instanciação, referências de tipo, leituras e escritas, e arestas de `throw`.

## Exemplos de prompts para agentes

- "Quais classes sobrescrevem `Renderer::draw` e quem o chama?" (`dependency_search`)
- "Mostre `OrderBook::match` e todos os chamadores." (`find_symbol`)
- "Explique como uma mensagem de dados de mercado chega ao motor de estratégias." (`get_task_context`)

## Limitações conhecidas

- `.h` aparece nas listas de extensões de C, C++ e Objective-C, então em árvores que misturam C e C++ os headers são compartilhados entre esses perfis.
- Corpos de macros do tipo objeto não são analisados, e chamadas a nomes filtrados da biblioteca padrão não são arestas do grafo. Use `text_pattern_search` para macros e usos de `std::`.

## Próximos passos

Conecte um repositório pelo [início rápido](/pt-br/docs/quickstart) e depois confira a matriz de suporte na [página de compatibilidade](/pt-br/docs/compatibility). Se parte da árvore é C puro, leia também o [guia de C](/pt-br/languages/c).

## Detalhes do motor

- Definições fora da classe como `void Socket::send()` são atribuídas à classe e ao namespace donos, e membros virtuais são registrados.
- A tipagem de receivers segue parâmetros, variáveis locais, campos, `for` baseado em intervalo e `auto`, e enxerga através de `unique_ptr`, `shared_ptr` e `optional`.
- Cláusulas de classe base alimentam a herança, expressões `new` contam como instanciação, e cerca de 273 nomes da biblioteca padrão são filtrados das relações.

## Pontos de entrada MCP úteis

- `find_symbol`: Use com um nome qualificado como `OrderBook::match` quando precisar da definição e dos chamadores.
- `dependency_search`: Use em uma classe base ou método virtual para encontrar sobrescritas e chamadores antes de uma mudança de assinatura.
- `get_task_context`: Use para prompts como "explique como uma mensagem de dados de mercado chega ao motor de estratégias".
