ReSharper C++ und Visual Assist im Vergleich

Dieses Dokument enthält eine Beschreibung der Unterschiede zwischen ReSharper C++ und Visual Assist von Whole Tomato.

Da beide Produkte aktiv weiterentwickelt werden und ihre Funktionalität regelmäßig überarbeitet wird, weisen wir darauf hin, dass dieser Vergleich nur für bestimmte Versionen relevant ist, die in der Kopfzeile der Vergleichstabelle angegeben sind.

If you discover any inaccurate items in this table, please post a comment below to let us know, and we'll update the table as soon as possible.

Visual Assist in Visual Studio 2019 + Visual Assist-Build 2341
in Visual Studio 2019 + ReSharper C++ 2019.2

Unterstützte Versionen von Visual Studio

Visual Studio 2019 Visual Studio 2019
Visual Studio 2017 Visual Studio 2017
Visual Studio 2015 Visual Studio 2015
Visual Studio 2013 Visual Studio 2013
Visual Studio 2012 Visual Studio 2012
Visual Studio 2010 Visual Studio 2010
Visual Studio 2008 Nicht unterstützt
Visual Studio 2005 Nicht unterstützt
Visual Studio .NET 2003 Nicht unterstützt
Visual Studio .NET 2002 Nicht unterstützt
Visual C++ 6.0 Nicht unterstützt

Unterstützte Spezifikationen von C/C++

C/C++ C/C++
C++/CLI C++/CLI

Erkennen von Problemen im Code

Hervorheben falsch eingegebener Symbole Hervorheben nicht aufgelöster Symbole
Navigation zwischen Codeproblemen (Toolfenster, Editor) Navigation zwischen Codeproblemen (Toolfenster, Editor, spezielle Befehle)
21 Clang-Tidy-Inspektionen 264 integrierte Überprüfungen für Clang-Tidy
Keine passende Funktionalität 652 integrierte Diagnosen für Clang-Tidy
Keine passende Funktionalität 87 integrierte Überprüfungen für Clang Static Analyzer
Rechtschreibprüfung Rechtschreibprüfung
Hervorheben von nicht übereinstimmenden Trennzeichen Keine passende Funktionalität
Keine passende Funktionalität Inkonsistente Benennungen
Null-Konstante kann durch nullptr ersetzt werden Null-Konstante kann durch nullptr ersetzt werden
Funktion ohne „override“-Spezifizierer überschrieben Funktion ohne „override“-Spezifizierer überschrieben
Konstruktor von shared_pointer/unique_pointer kann durch make_shared/make_unique ersetzt werden Konstruktor eines intelligenten Zeigers anstelle von dessen Funktion verwendet
Keine passende Funktionalität Mehr als 180 proprietäre Codeinspektionen
Keine passende Funktionalität Codeinspektionen für die meisten Compilerfehler und einige Warnungen
Keine passende Funktionalität Asynchrone Suche nach Codeproblemen in einem beliebigen Bereich
Keine passende Funktionalität Codeinspektionen von der Befehlszeile aus ausführen

Quick-Fixes für Codeprobleme

Erstellen anhand Verwendung Erstellen anhand Verwendung
#include hinzufügen Globale Variable, Typ, Typdefinition, Funktion, Makro importieren
Deklaration erstellen Deklaration erstellen
Fall reparieren Keine passende Funktionalität
Mehr als 10 Quick-Fixes für konfigurierbare Inspektionen Mehr als 120 Quick-Fixes für konfigurierbare Inspektionen

Programmierunterstützung

Hervorhebung passender Trennzeichen Hervorhebung gepaarter Elemente (einschließlich von Makros und Formatargumenten in printf und boost::format)
Aktuelle Zeile hervorheben Aktuelle Zeile hervorheben
Acronyme / Kurznotation CamelHumps
Vorschlagslisten / Intelligente Vorschläge Codevervollständigung mit intelligenten Vorschlägen
Punkt zu -> konvertieren Punkt zu -> und -> zu Punkt konvertieren
Intelligente Auswahl Auswahl erweitern/verkleinern + Enthaltene Deklaration auswählen
Mehrere Zwischenablagen Verlauf der Zwischenablage mit Vorschau der Elemente
Parameterinformationen Parameterinformationen
Keine passende Funktionalität Editor-Hinweise
Verbesserte farbliche Syntaxhervorhebung (6 verschiedene Bezeichnerarten) – Stable-Symbole in KursivschriftLokale Symbole in Fettschrift Syntaxhervorhebung (20 verschiedene Bezeichnerarten)
Verweise auf Symbol unter dem Cursor hervorheben Verwendungen in der Datei hervorheben
Auswahl umschließen Umschließen / Kommentieren mit Zeilen- oder Blockkommentar
Schließende Tokens automatisch einfügen Passende Trennzeichen und Format automatisch einfügen
Quickinfo mit Dokumentation Tooltips mit Syntaxhervorhebung und Dokumentation
Mehrzeilige Kommentare automatisch mit Enter erweitern Mehrzeilige /**/- und ///-Kommentare automatisch mit Enter erweitern
Unterstrich nach m und Shift einfügen Keine passende Funktionalität
Verbesserte Listenfelder Keine passende Funktionalität
Hervorhebung übereinstimmender Wörter (Code und Kommentare) Keine passende Funktionalität
Spaltenanzeige (rechter Rand) Keine passende Funktionalität
Zeilen sortieren Keine passende Funktionalität
Pfad einfügen Keine passende Funktionalität
Vorschau der Dateien von den Kommentaren aus Keine passende Funktionalität
Vergrößerung des Editors zurücksetzen Keine passende Funktionalität
Keine passende Funktionalität Aktuelle Zeile oder Auswahl duplizieren
Keine passende Funktionalität Postfix-Vervollständigung
Keine passende Funktionalität Postfixvorlagen
Keine passende Funktionalität Schnellansicht der Dokumentation
Keine passende Funktionalität Automatische Hervorhebung von Funktionsausstiegen

Codestilunterstützung

Format after paste (Formatierungsregeln stammen von Visual Studio) Formatierungsregeln auf einen beliebigen Bereich anwenden (mit der eigenen umfangreichen Sammlung an Formatierungsregeln von ReSharper C++)
Keine passende Funktionalität Formatierungsregeln anhand des bestehenden Codes erlernen
Keine passende Funktionalität Unterstützung für EditorConfig
Keine passende Funktionalität Unterstützung für Clang-Format
Keine passende Funktionalität Mit der Codebereinigung Codestile anwenden und Coderedundanzen in einem beliebigen Bereich entfernen
Keine passende Funktionalität Konfigurierbarer Datei-Headerstil
Keine passende Funktionalität Konfigurierbarer Benennungsstil mit vordefinierten Schemata (STL, Google, LLVM, CamelCase, Microsoft)
Keine passende Funktionalität Konfigurierbarer Stil für die Modifizierer const und volatile in generiertem Code
Keine passende Funktionalität Konfigurierbarer Stil für die include-Direktive in generiertem Code
Keine passende Funktionalität Konfigurierbarer Stil für Standardinitialisierer von Zeigern (0|nullptr|NULL) in generiertem Code

Refaktorierungen und Codetransformationen

Zugriff auf Refaktorierungsbefehle Refactor this
Rename Rename
Signatur ändern Signatur ändern
Variable einführen Variable einführen
Encapsulate field Encapsulate field (mit der Aktion Generate getters and setters)
Methode extrahieren Methode extrahieren
Add/Remove braces Add/Remove braces
Rename files Rename file
Move implementation to source file Move implementation out of class scope
Move Implementation to Header File / Class Declaration Keine passende Funktionalität
Move selection to new file Keine passende Funktionalität
Snippets for refactorings (bearbeitbar) Keine passende Funktionalität
Convert Instance to Pointer und umgekehrt Keine passende Funktionalität
Simplify Instance Declaration Keine passende Funktionalität
Keine passende Funktionalität Introduce field
Keine passende Funktionalität Inline variable
Keine passende Funktionalität Introduce namespace alias
Keine passende Funktionalität Introduce/Inline typedef
Keine passende Funktionalität Die Spezifizierer = default, = delete, pure oder virtual zu einer Funktion hinzufügen
Keine passende Funktionalität Convert ?: to if und umgekehrt
Keine passende Funktionalität Konvertiere #include-Direktive von Winkelklammer zu Anführungszeichen und umgekehrt
Keine passende Funktionalität Typedef-Deklaration zu Alias-Deklaration konvertieren und umgekehrt
Keine passende Funktionalität In verschachtelte Namespace-Definition konvertieren
Keine passende Funktionalität Regulären Rückgabetyp zu nachgestelltem Rückgabetyp konvertieren und umgekehrt
Keine passende Funktionalität Abgeleiteten Typ erstellen: Klasse, Schnittstelle, Struktur, Schnittstellenklasse, Schnittstellenstruktur, Verweisklasse, Verweisstruktur
Keine passende Funktionalität Relationalen Operator spiegeln
Keine passende Funktionalität Operatorargumente spiegeln
Keine passende Funktionalität Feld anhand von Konstruktorparametern initialisieren
Keine passende Funktionalität if-Anweisung invertieren
Keine passende Funktionalität Geschachtelte if-Anweisungen zusammenführen
Keine passende Funktionalität Logischen Ausdruck negieren
Keine passende Funktionalität Klammern entfernen
Keine passende Funktionalität „auto“ durch explizite Typdeklaration ersetzen
Keine passende Funktionalität „decltype“ durch den zugrunde liegenden Typ ersetzen
Keine passende Funktionalität „decltype(auto)“ durch explizite Typdeklaration ersetzen
Keine passende Funktionalität Deklaration teilen oder mit mehreren Deklarationen verknüpfen
Keine passende Funktionalität Makroaufruf ersetzen
Keine passende Funktionalität Vorlagen-Typalias ersetzen
Keine passende Funktionalität Vorlagenargumente explizit angeben
Keine passende Funktionalität typedef ersetzen (und optional alle geschachtelten typedefs)

Codegenerierung

Schnittstelle implementieren / Virtuelle Methoden Fehlende / überschriebene Mitglieder generieren
Implementierung erstellen Implementierung generieren + Inline-Implementierung generieren
Methodenimplementierungen erstellen Definitionen generieren
Fehlende Fallanweisungen hinzufügen Fehlende Fallanweisungen für Enum generieren
Dokumentenmethode Dokumentensymbol
Vorwärtsdeklaration hinzufügen Vorwärtsdeklaration hinzufügen
Mitglied hinzufügen Keine passende Funktionalität
Ähnliches Mitglied hinzufügen Keine passende Funktionalität
Keine passende Funktionalität Konstruktoren generieren
Keine passende Funktionalität Operatoren fürs Kopieren und Verschieben generieren
Keine passende Funktionalität Getters und Setters generieren
Keine passende Funktionalität Gleichheitsoperatoren generieren
Keine passende Funktionalität Relationale Operatoren generieren
Keine passende Funktionalität Datenstromvorgänge (einschließlich Boost.Serialization-Funktionen) generieren
Keine passende Funktionalität Hashfunktion generieren
Keine passende Funktionalität Austauschfunktion generieren
Keine passende Funktionalität Methoden für Google Mock generieren
Keine passende Funktionalität Funktion generieren, die enum zu einem String konvertiert (konfigurierbar)
Keine passende Funktionalität Abgeleiteten Typ erstellen

Codeausschnitte/-vorlagen

VA-Ausschnitte 30 integrierte Live-Vorlagen + benutzerdefinierte Live-Vorlagen
Mit Ausschnitten umschließen 19 integrierte Umschließungsvorlagen + benutzerdefinierte Umschließungsvorlagen
Datei erstellen (muss zweimal für Header und cpp aufgerufen werden) Integrierte Dateivorlagen für Klassen und Strukturen (erstellen Header- und CPP-Dateien zugleich) + benutzerdefinierte Dateivorlagen
Reservierte Strings /Umgebungsplatzhalter in Ausschnitten Makros in Codevorlagen
Editor für Ausschnitte Vorlagen-Editor
Ausschnitt anhand der Auswahl erstellen Live-Vorlage anhand von Auswahl erstellen
Keine passende Funktionalität Vorlagen mit mehreren Dateien

Navigation und Suche

Go to declaration (mit Goto) Go to declaration (reagiert auf Verwendungen)
Go to implementation (mit Goto) Go to implementation
VA-Gliederung Dateistruktur
Recent files (VA-Ansicht) Go to recent files
Open file in solution Gehe zu Datei
Find symbol in solution Gehe zu Symbol
Goto related Go to related files
Goto member Go to File Member
Move scope Go to next/previous member
Verweise suchen Verwendungen finden
Find by context Go to next/previous highlight / Find Results window
Entsprechende Datei öffnen Zwischen Header und Quelle hin- und herschalten
Rückwärts und vorwärts navigieren Durch den Navigationsverlauf bewegen
VA-Hashtags Bookmarks
Quelllinks Aufgaben mit externen URL-Mustern
Methoden in einer Datei auflisten Keine passende Funktionalität
VA-Navigationsleiste Keine passende Funktionalität
Schwebender Klassenkatalog Keine passende Funktionalität
Projektdateien in dem Fenster Output hervorheben Keine passende Funktionalität
Suchergebnisse hervorheben Keine passende Funktionalität
Keine passende Funktionalität Globale Suche
Keine passende Funktionalität Go to text
Keine passende Funktionalität Go to recent edits
Keine passende Funktionalität Go to previous edit
Keine passende Funktionalität Navigate to
Keine passende Funktionalität Gehe zu Basis-Symbolen
Keine passende Funktionalität Gehe zu abgeleiteten Symbolen
Keine passende Funktionalität Go to type of symbol
Keine passende Funktionalität Go to file nearby
Keine passende Funktionalität Type Hierarchy
Keine passende Funktionalität Hierarchie enthaltener Elemente
Keine passende Funktionalität Go to primary template/specializations
Keine passende Funktionalität Die aktuelle Datei im Projektmappen-Explorer suchen
Keine passende Funktionalität Aktionen und Einstellungen finden
Keine passende Funktionalität Haltepunktnavigation und Toolfenster
Keine passende Funktionalität Includes-Analyzer

Debugging

Schrittfilter Schrittfilter
Temporär alle aktivierten Haltepunkte deaktivieren Keine passende Funktionalität
Temporär alle Haltepunkte an den aktuellen Thread binden Keine passende Funktionalität
Keine passende Funktionalität Inline-Überwachungselemente
Keine passende Funktionalität Suchbare DataTips

Unreal Engine

Unterstützung für UE4-Projekte Unterstützung für UE4-Projekte
Intelligente Vorschläge für UE4-Reflection-Bezeichner Codevervollständigung für UE4-Reflection-Bezeichner
Keine passende Funktionalität Kurzdokumentation für UE4-Reflection-Bezeichner
Unterstützung für UE4-Remoteprozeduraufrufe Unterstützung für UE4-Remoteprozeduraufrufe
Keine passende Funktionalität Refaktorierungen „Rename“ und „Change Signature“ für UE4-RPC-Funktionen
Engine-Quelle von Navigation ausschließen Keine passende Funktionalität
Keine passende Funktionalität Später durchgeführte Indizierung des Engine-Codes
Keine passende Funktionalität Unterstützung für UE4-Namenskonventionen
Keine passende Funktionalität UE4-spezifische Codeinspektionen

Unit-Tests

Keine passende Funktionalität Unit-Test-Unterstützung für Google Test-, Catch 2.5-, Boost.Test- und doctest-Frameworks

Verwaltung der Einstellungen

Einstellungen importieren/exportieren Automatische mehrschichtige Synchronisierung der Einstellungen und benutzerdefinierten Vorlagen