# C++ in Maguyva: Klassen- und Aufrufgraphen für große Codebasen

Canonical source: https://maguyva.ai/de/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 unterstützt C++ mit AST, Symbolen und Graph, damit KI-Agenten Klassen, Namespaces, virtuelle Overrides und Aufrufer in großen C++-Codebasen verfolgen.

## Unterstützungsüberblick

- Stufe: AST- und Symbol-Support
- Programmierung
- Dateiendungen: .c, .c++, .cc, .cpp, .cxx, .h, +4 weitere
- Echtes AST-Parsing für syntaxbewusste Suche und strukturellen Kontext.
- Benannte Symbole speisen semantisches Lookup und Cross-Referenzierung. Graph-Navigation ist verfügbar, wenn die Beziehungsextraktion aktiviert ist.
- Diese Sprache liefert Symbole und Beziehungen für die graphgestützte Suche; die unterstützten Kantentypen variieren je nach nativen Konstrukten der Sprache.
- AST-Parsing und Symbolextraktion sind beide verfügbar.

## Am besten geeignet

- Game-Engines, Handelssysteme, Browser und andere große C++-Codebasen, in denen eine Header-Änderung den halben Baum neu baut.
- Klassenhierarchien mit virtuellen Methoden, bei denen die ausgeführte Methode an anderer Stelle definiert ist als dort, wo sie aufgerufen wird.
- Agentengestütztes Refactoring, das vor einer Signaturänderung Aufrufer und Overrides kennen muss.

## Agentenabläufe

- Jeden Override einer virtuellen Methode finden, bevor sich die Basisklasse ändert.
- Aufrufer einer Funktion oder Klassenmethode mit Namespace wie `net::Socket::send` in der gesamten Codebasis auflisten.
- Nachverfolgen, wo eine Klasse mit `new` erzeugt wird und welche Member sie danach berührt.

## Warum C++ Struktur braucht statt Textsuche

In C++ sind Namen nicht eindeutig. `send` kann eine freie Funktion sein, ein Member von drei Klassen und ein Override in einer vierten. Namespaces, Templates und Definitionen außerhalb der Klasse wie `Socket::send` in einer `.cpp`-Datei verteilen einen Typ auf viele Dateien. Die Textsuche liefert jeden Treffer, sagt einem Agenten aber nicht, welchen davon ein Aufruf erreicht.

Maguyva indexiert Klassen, Member und Aufrufe samt ihren Besitzern, damit ein Agent der echten Struktur folgen kann, bevor er etwas ändert.

## Was Maguyva in C++ extrahiert

Maguyva deckt die gängigen C++-Endungen für Quell- und Header-Dateien ab, darunter `.cpp`, `.cc`, `.cxx`, `.hpp`, `.hh` und `.hxx`. Klassen, Structs und Funktionen werden extrahiert, und eine Definition außerhalb der Klasse wie `void Socket::send()` wird ihrer besitzenden Klasse und ihrem Namespace zugeordnet. Virtuelle Member werden erfasst, und Template-Parameter sind Teil der Signaturen.

Die Receiver-Typisierung folgt Parametern, lokalen Deklarationen, Feldern, bereichsbasierten `for`-Schleifen und `auto` und blickt durch `unique_ptr`, `shared_ptr` und `optional` hindurch, sodass ein Aufruf wie `conn->send()` zur richtigen Klasse aufgelöst werden kann. Basisklassen-Klauseln speisen die Vererbung, und `new`-Ausdrücke zählen als Instanziierung.

Es gilt dieselbe Maskierung von Export- und Annotationsmakros wie bei C. Etwa 273 Namen der Standardbibliothek (`std::cout`, `std::endl`, `printf` und ähnliche) werden aus den Beziehungen gefiltert. Der Graph erfasst Aufrufe, Includes, Vererbung, Overrides, Instanziierung, Typreferenzen, Lese- und Schreibzugriffe sowie `throw`-Kanten.

## Beispiel-Prompts für Agenten

- „Welche Klassen überschreiben `Renderer::draw`, und wer ruft es auf?“ (`dependency_search`)
- „Zeige mir `OrderBook::match` und jeden Aufrufer.“ (`find_symbol`)
- „Erkläre, wie eine Marktdatennachricht die Strategie-Engine erreicht.“ (`get_task_context`)

## Bekannte Grenzen

- `.h` steht in den Listen der Dateiendungen von C, C++ und Objective-C, daher teilen sich diese Profile Header in gemischten C- und C++-Bäumen.
- Rümpfe objektartiger Makros werden nicht geparst, und Aufrufe gefilterter Namen der Standardbibliothek sind keine Graphkanten. Verwende `text_pattern_search` für Makros und die Nutzung von `std::`.

## Nächste Schritte

Verbinde ein Repository über den [Schnellstart](/de/docs/quickstart) und prüfe dann die Unterstützungsmatrix auf der [Kompatibilitätsseite](/de/docs/compatibility). Wenn Teile des Baums reines C sind, lies auch den [C-Leitfaden](/de/languages/c).

## Engine-Einordnung

- Definitionen außerhalb der Klasse wie `void Socket::send()` werden ihrer besitzenden Klasse und ihrem Namespace zugeordnet, und virtuelle Member werden erfasst.
- Die Receiver-Typisierung folgt Parametern, lokalen Variablen, Feldern, bereichsbasiertem `for` und `auto` und blickt durch `unique_ptr`, `shared_ptr` und `optional` hindurch.
- Basisklassen-Klauseln speisen die Vererbung, `new`-Ausdrücke zählen als Instanziierung, und etwa 273 Namen der Standardbibliothek werden aus den Beziehungen gefiltert.

## Nützliche MCP-Einstiegspunkte

- `find_symbol`: Nutz es für einen qualifizierten Namen wie `OrderBook::match`, wenn du Definition und Aufrufer brauchst.
- `dependency_search`: Nutz es vor einer Signaturänderung auf einer Basisklasse oder virtuellen Methode, um Overrides und Aufrufer zu finden.
- `get_task_context`: Nutz es für Prompts wie „erkläre, wie eine Marktdatennachricht die Strategie-Engine erreicht“.
