Neues in Visual C++ 2010

In diesem Dokument werden die neuen und erweiterten Visual C++-Funktionen vorgestellt, die in Visual Studio 2010 zur Verfügung stehen.

Visual C++-Compiler und -Linker

Auto-Schlüsselwort

Das Auto-Schlüsselwort dient einem neuen Zweck. Verwenden Sie die Standardbedeutung des auto-Schlüsselworts, um eine Variable zu deklarieren, deren Typ aus dem Initialisierungsausdruck in der Deklaration der Variable abgeleitet wird. Die /Zc:auto-Compileroption ruft entweder die neue oder die vorherige Bedeutung des auto-Schlüsselworts auf.

decltype-Typspezifizierer

Der decltype-Typspezifizierer gibt den Typ eines angegebenen Ausdrucks zurück. Verwenden Sie den decltype-Typspezifizierer in Kombination mit dem auto-Schlüsselwort, um einen Typ zu deklarieren, der entweder komplex oder nur dem Compiler bekannt ist. Verwenden Sie die Kombination z. B., um eine Vorlagenfunktion zu deklarieren, deren Rückgabetyp von den Typen der Vorlagenargumente abhängt. Oder deklarieren Sie eine Vorlagenfunktion, die eine andere Funktion aufruft und dann den Rückgabetyp der aufgerufenen Funktion zurückgibt.

Lambda-Ausdrücke

Lambdafunktionen weisen einen Funktionstext, aber keinen Namen auf. In Lambdafunktionen werden die besten Eigenschaften von Funktionszeigern und Funktionsobjekten kombiniert.

Verwenden Sie eine Lambdafunktion allein als Vorlagenfunktionsparameter anstelle eines Funktionsobjekts oder zusammen mit dem auto-Schlüsselwort, um eine Variable zu deklarieren, deren Typ ein Lambda ist.

Rvalue-Verweis

Der rvalue-Verweisdeklarator (&&) deklariert einen Verweis auf einen rvalue. Ein rvalue-Verweis ermöglicht es Ihnen, Verschiebesemantik und perfekte Weiterleitung zu verwenden, um effizientere Konstruktoren, Funktionen und Vorlagen zu schreiben.

static_assert-Deklaration

Eine static_assert-Deklaration testet eine Softwareassertion zur Kompilierzeit, im Gegensatz zu anderen Assertionsmechanismen, die zur Laufzeit testen. Wenn die Assertion fehlschlägt, schlägt die Kompilierung fehl, und eine angegebene Fehlermeldung wird ausgegeben.

Nullptr-Schlüsselwort und __nullptr-Schlüsselwort

Der Visual C++-Compiler ermöglicht es, das nullptr-Schlüsselwort mit systemeigenem Code oder verwaltetem Code zu verwenden. Das nullptr-Schlüsselwort gibt an, dass ein Objekthandle innerer Zeiger, oder systemeigener Zeigertyp nicht auf ein Objekt zeigt. Der Compiler interpretiert nullptr als verwalteten Code, wenn Sie die /clr-Compileroption verwenden, und als systemeigenen Code, wenn Sie die /clr-Option nicht verwenden.

Das Microsoft-spezifische __nullptr-Schlüsselwort hat die gleiche Bedeutung wie nullptr, gilt aber ausschließlich für systemeigenen Code. Wenn Sie systemeigenen C/C++-Code mit der /clr-Compileroption kompilieren, kann der Compiler nicht ermitteln, ob es sich bei dem nullptr-Schlüsselwort um einen Begriff für systemeigenen oder für verwalteten Code handelt. Um dem Compiler Ihre Absicht verständlich zu machen, verwenden Sie das nullptr-Schlüsselwort, um den Begriff für verwalteten Code anzugeben, und __nullptr, um den Begriff für systemeigenen Code anzugeben.

/Zc:trigraphs-Compileroption

Die Unterstützung von trigraphs ist standardmäßig deaktiviert. Verwenden Sie die /Zc:trigraphs-Compileroption, um die Unterstützung von Trigraphen zu aktivieren.

Ein Trigraph besteht aus zwei aufeinanderfolgenden Fragezeichen (??) gefolgt von einem eindeutigen dritten Zeichen. Der Compiler ersetzt einen Trigraphen durch das entsprechende Interpunktionszeichen. Der Compiler ersetzt z. B. den Trigraphen ??= durch das #-Zeichen (Nummernzeichen). Verwenden Sie Trigraphen in C-Quelldateien, die einen Zeichensatz verwenden, der keine bestimmten Interpunktionszeichen enthält.

Neue profilgesteuerte Optimierungsoption

PogoSafeMode ist eine neue Option zur profilgesteuerten Optimierung, mit der Sie angeben können, ob beim Optimieren der Anwendung der abgesicherte Modus oder der schnelle Modus verwendet werden soll. Der sichere Modus ist threadsicher, aber langsamer als der schnelle Modus. Der schnelle Modus ist das Standardverhalten.

Neue CLR-Option "/clr: nostdlib"

Für /clr (Common Language Runtime-Kompilierung) wurde eine neue Option hinzugefügt. Wenn andere Versionen der gleichen Bibliotheken eingeschlossen sind, wird ein Compilerfehler ausgegeben. Mit der neuen Option können Sie die Standard-CLR-Bibliotheken ausschließen, damit das Programm eine angegebene Version verwenden kann.

Neue Pragma-Direktive "detect_mistmatch"

Die Pragma-Direktive detect_mismatch ermöglicht es Ihnen, ein Tag in Ihre Dateien einzufügen, das mit anderen Tags mit dem gleichen Namen verglichen wird. Wenn mehrere Werte für den gleichen Namen vorhanden sind, gibt der Linker einen Fehler aus.

Systeminterne XOP-, FMA4- und LWP-Funktionen

Es wurden neue systeminterne Funktionen hinzugefügt, um die Prozessortechnologien In Visual Studio 2010 SP1 hinzugefügte systeminterne XOP-Funktionen, In Visual Studio 2010 SP1 hinzugefügte systeminterne FMA4-Funktionen und In Visual Studio 2010 SP1 hinzugefügte systeminterne LWP-Funktionen zu unterstützen. Verwenden Sie __cpuid, __cpuidex, um zu ermitteln, welche Prozessortechnologien auf einem bestimmten Computer unterstützt werden.

Visual C++-Projekte und das Buildsystem

MSBuild

Visual C++-Projektmappen und -Projekte werden jetzt mit MSBuild.exe erstellt, das VCBuild.exe ersetzt. MSBuild ist das gleiche flexible, erweiterbare, XML-basiertes Buildtool, das von den anderen Visual Studio-Sprachen und -Projekttypen verwendet wird. Infolge dieser Änderung verwenden Visual C++-Projektdateien jetzt ein XML-Dateiformat und haben die Dateinamenerweiterung .vcxproj. Visual C++-Projektdateien aus früheren Versionen von Visual Studio werden automatisch in das neue Dateiformat konvertiert. Weitere Informationen finden Sie unter MSBuild (Visual C++).

VC++-Verzeichnisse

Die Einstellung VC++-Verzeichnisse wird jetzt an zwei Stellen angegeben. Verwenden Sie Projekteigenschaftenseiten, um projektspezifische Werte für VC++-Verzeichnisse festzulegen. Verwenden Sie den Eigenschaften-Manager und ein Eigenschaftenblatt, um globale konfigurationsspezifische Werte für VC++-Verzeichnisse festzulegen.

Abhängigkeiten von Projekt zu Projekt

In früheren Versionen wurden Abhängigkeiten zwischen Projekten in der Projektmappendatei gespeichert. Wenn diese Projektmappen in das neue Projektdateiformat konvertiert werden, werden Abhängigkeiten in Verweise von Projekt zu Projekt konvertiert. Diese Änderung kann sich auf Anwendungen auswirken, da sich die Konzepte der Projektmappenabhängigkeiten und der Verweise von Projekt zu Projekt unterscheiden.

Makros und Umgebungsvariablen

Das neue _ITERATOR_DEBUG_LEVEL-Makro ruft Debugunterstützung für Iteratoren auf. Verwenden Sie dieses Makro anstelle der älteren Makros _SECURE_SCL und _HAS_ITERATOR_DEBUGGING.

Visual C++-Bibliotheken

Concurrency Runtime-Bibliotheken

Das Concurrency Runtime-Framework unterstützt Anwendungen und Komponenten, die simultan ausgeführt werden, und ist das Framework für die Programmierung gleichzeitiger Anwendungen in Visual C++. Zur Unterstützung der Programmierung gleichzeitiger Anwendungen stellt Parallel Patterns Library (PPL) allgemeine Container und Algorithmen für die differenzierte parallele Verarbeitung bereit. Die Asynchronous Agents Library stellt ein akteurbasiertes Programmiermodell und Meldungsübergabeschnittstellen für simple Datenfluss- und Pipelineaufgaben bereit.

C++-Standardbibliothek

In der folgenden Liste werden viele der Änderungen beschrieben, die an der C++-Standardbibliothek vorgenommen wurden.

  • Die neue C++-Sprachfunktion rvalue-Verweis wurde verwendet, um Verschiebesemantik und perfekte Weiterleitung für viele Funktionen in der Standardvorlagenbibliothek zu implementieren. Verschiebesemantik und perfekte Weiterleitung verbessern wesentlich die Leistung von Vorgängen, die Variablen oder Parameter reservieren oder zuweisen.

  • Rvalue-Verweise werden außerdem verwendet, um die neue unique_ptr-Klasse zu implementieren, die als intelligenter Zeigertyp sicherer ist als die auto_ptr-Klasse. Die unique_ptr-Klasse ist verschiebbar, aber nicht kopierbar, implementiert strenge Besitzsemantik, ohne die Sicherheit zu beeinträchtigen, und arbeitet gut mit Containern zusammen, die rvalue-Verweise unterstützen. Diese auto_ptr-Klasse ist veraltet.

  • Dem <algorithm>-Header wurden 15 neue Funktionen hinzugefügt, z. B. find_if_not, copy_if und is_sorted.

  • Im <memory>-Header stellt die neue make_shared-Funktion ein komfortables, robustes und effizientes Verfahren dar, mit dem ein freigegebener Zeiger auf ein Objekt zur gleichen Zeit wie das Objekt erstellt werden kann.

  • Einfach verkettete Listen werden mithilfe des <forward_list>-Headers unterstützt.

  • Die neuen Memberfunktionen cbegin, cend, crbegin und crend stellen einen const_iterator bereit, der einen Container vorwärts und rückwärts durchläuft.

  • Der <system_error>-Header und zugehörige Vorlagen unterstützen die Verarbeitung von Systemfehlern auf niedriger Ebene.

  • Member der exception_ptr-Klasse können verwendet werden, um Ausnahmen zwischen Threads zu transportieren.

  • Der <codecvt>-Header unterstützt die Umwandlung verschiedener Unicode-Zeichencodierungen in andere Codierungen.

  • Der <allocators>-Header definiert mehrere Vorlagen, die die Belegung und Freigabe von Speicherblöcken für auf Knoten basierende Container unterstützen.

  • Es gibt eine Vielzahl von Aktualisierungen des <random>-Headers.

Microsoft Foundation Class-Bibliothek (MFC-Bibliothek)

Windows 7-Funktionen

MFC unterstützt viele Windows 7-Funktionen, z. B. die Benutzeroberfläche des Menübands, die Taskleiste, Sprunglisten, Miniaturansichten auf Taskleisten, Miniaturansichten, die Statusanzeige, Symboloverlays und die Suchindizierung. Da MFC automatisch viele der Windows 7-Funktionen unterstützt, müssen Sie eine vorhandene Anwendung möglicherweise nicht weiter anpassen. Zum Unterstützen anderer Funktionen in neuen Anwendungen verwenden Sie den MFC-Anwendungs-Assistenten, um die Funktionen anzugeben, die verwendet werden sollen.

Unterstützung der Mehrfingereingabe

MFC unterstützt Anwendungen mit einer Benutzeroberfläche für Mehrfingereingaben, z. B. Anwendungen, die für das Betriebssystem Microsoft Surface geschrieben wurden. Eine Anwendung mit Mehrfingereingabe kann Fingereingabemeldungen von Windows und Gestenmeldungen behandeln, bei denen es sich um kombinierte Fingereingabemeldungen handelt. Registrieren Sie die Anwendung einfach für Fingereingabe- und Gestenereignisse. Das Betriebssystem wird dann Mehrfingereingabeereignisse an die Ereignishandler weiterleiten.

Unterstützung für hohe DPI-Auflösungen

Standardmäßig unterstützen MFC-Anwendungen jetzt hohe DPI-Auflösungen. Wenn eine Anwendung hohe DPI-Auflösungen (Dots Per Inch, Punkte pro Zoll) unterstützt, kann das Betriebssystem Fenster, Texte und andere Benutzeroberflächenelemente auf die aktuelle Bildschirmauflösung skalieren. Das heißt, dass ein skaliertes Bild mit größerer Wahrscheinlichkeit korrekt dargestellt und nicht beschnitten oder in Pixel aufgelöst wird.

Neustart-Manager

Der Neustart-Manager speichert automatisch Dokumente und startet die Anwendung neu, falls diese unerwartet geschlossen oder neu gestartet wird. Sie können den Neustart-Manager beispielsweise verwenden, um die Anwendung zu starten, nachdem sie durch ein automatisches Update geschlossen wurde. Weitere Informationen zum Konfigurieren einer Anwendung für die Verwendung des Neustart-Managers finden Sie unter Gewusst wie: Hinzufügen von Unterstützung für den Neustart-Manager.

CTaskDialog

Die CTaskDialog-Klasse kann anstelle des standardmäßigen AfxMessageBox-Meldungsfelds verwendet werden. Diese CTaskDialog-Klasse erfasst und zeigt mehr Informationen an als das Standardmeldungsfeld.

SafeInt-Bibliothek

Die neue SafeInt-Bibliothek führt sichere arithmetische Operationen aus, die den Ganzzahlüberlauf berücksichtigen. Diese Bibliothek vergleicht außerdem verschiedene Typen von ganzen Zahlen.

Neue ATL-Vorlagen (Active Template Library)

ATL wurden neue Makros hinzugefügt, um die Funktionalität von PROP_ENTRY_TYPE und PROP_ENTRY_TYPE_EX zu erweitern. Mit PROP_ENTRY_INTERFACE und PROP_ENTRY_INTERFACE_EX können Sie eine Liste gültiger CLSIDs hinzufügen. Mit PROP_ENTRY_INTERFACE_CALLBACK und PROP_ENTRY_INTERFACE_CALLBACK_EX können Sie eine Rückruffunktion anzugeben, um zu bestimmen, ob eine CLSID gültig ist.

/analyze-Warnungen

Die meisten Warnungen von /analyze (Codeanalyse in der Enterprise-Version) wurden aus den C-Laufzeit- (CRT), MFC- und ATL-Bibliotheken entfernt.

Unterstützung von Animationen und D2D

MFC unterstützt jetzt Animationen und Direct2D-Grafiken. Die MFC-Bibliothek verfügt über mehrere neue MFC-Klassen und -Funktionen, um diese Funktionalität zu unterstützen. Es gibt auch zwei neue exemplarische Vorgehensweisen, die das Hinzufügen eines D2D-Objekts und eines Animationsobjekts zu einem Projekt veranschaulichen. Dies sind die exemplarischen Vorgehensweisen Exemplarische Vorgehensweise: Hinzufügen eines D2D-Objekts zu einem MFC-Projekt und Exemplarische Vorgehensweise: Hinzufügen von Animationen zu einem MFC-Projekt.

IDE

Die integrierte Entwicklungsumgebung (IDE) in Visual C++ 2010 bietet wesentliche Verbesserungen bei der Leistung, Genauigkeit, Skalierbarkeit und den verfügbaren Tools, sodass Sie noch produktiver arbeiten können.

Verbessertes IntelliSense

IntelliSense für Visual C++ wurde vollständig neu entworfen und ist jetzt schneller, bietet mehr Genauigkeit und erlaubt somit die Behandlung größerer Projekte. Um diese Verbesserung zu erzielen, unterscheidet die IDE zwischen der Art und Weise, in der Entwickler den Quellcode prüfen und bearbeiten, und der Verwendung des Quellcodes und der Projekteinstellungen durch die IDE beim Erstellen einer Projektmappe.

Aufgrund dieser Unterscheidung werden Suchfunktionen wie die Klassenansicht und das neue Dialogfeld Navigieren zu von einem System behandelt, das auf einer neuen SQL Server-Desktopdatenbankdatei (.sdf) basiert, die die alte Datei no compile browse (. ncb) ersetzt. IntelliSense-Funktionen, z. B. QuickInfo, automatische Vervollständigung und die Parameterhilfe, analysieren Übersetzungseinheiten nur, wenn dies erforderlich ist. Hybridfunktionen wie das neue Fenster Aufrufhierarchie verwenden eine Kombination von Such- und IntelliSense-Funktionen.

Da IntelliSense nur die aktuell benötigten Informationen verarbeitet, reagiert die IDE schneller auf Benutzeraktionen. Zusätzlich ist die Genauigkeit von IDE-Ansichten und -Fenstern höher, da die verwendeten Informationen aktueller sind. Auch die IDE-Infrastruktur ist besser organisiert, leistungsfähiger, besser skalierbar und kann größere Projekte verarbeiten.

Verbesserte IntelliSense-Fehler

Die IDE bietet eine verbesserte Fehlererkennung für Fehler, die einen Verlust von IntelliSense verursachen können, und zeigt rote wellenförmige Unterstreichungen unter diesen Fehlern an. Außerdem zeigt die IDE die IntelliSense-Fehler im Fenster Fehlerliste an. Um den Code anzuzeigen, der das Problem verursacht, doppelklicken Sie im Fenster Fehlerliste auf den Fehler.

#include-AutoVervollständigen-Funktion

Die IDE unterstützt die automatische Vervollständigung für das #include-Schlüsselwort. Wenn Sie #include eingeben, erstellt die IDE eine Dropdownliste gültiger Headerdateien. Wenn Sie fortfahren, indem Sie einen Dateinamen eingeben, filtert die IDE die Liste auf Grundlage Ihrer Eingabe. Zu jedem Zeitpunkt können Sie in der Liste die Datei auswählen, die Sie einschließen möchten. Auf diese Weise können Sie Dateien schnell einschließen, ohne den genauen Dateinamen zu kennen.

Im Dialogfeld Navigieren zu können Sie nach allen Symbolen und Dateien im Projekt suchen, die einer angegebenen Zeichenfolge entsprechen. Die Suchergebnisse werden sofort aktualisiert, wenn Sie weitere Zeichen im Suchfeld eingeben. Im Feedbackfeld Ergebnisse wird die Anzahl der gefundenen Elemente angezeigt, sodass Sie die Suche nach Bedarf weiter eingrenzen können. Anhand der Feedbackfelder Art/Umfang, Speicherort und Vorschau können Sie Elemente mit ähnlichen Namen unterscheiden. Außerdem können Sie diese Funktion um eine Unterstützung für weitere Programmiersprachen erweitern.

Paralleles Debuggen und Profilerstellung

Der Visual Studio-Debugger unterstützt die Concurrency Runtime und hilft Ihnen bei der Problembehebung bei Anwendungen mit paralleler Verarbeitung. Sie können das neue Parallelitätsprofilertool verwenden, um das Gesamtverhalten der Anwendung zu visualisieren. Außerdem stehen Ihnen neue Toolfenster zur Verfügung, in denen der Status von Aufgaben und zugehörigen Aufruflisten dargestellt werden kann.

Menüband-Designer

Der Menüband-Designer ist ein grafisches Werkzeug, mit dem Sie ein MFC-Menüband erstellen und bearbeiten können. Das fertige Menüband wird durch eine XML-basierte Ressourcendatei (.mfcribbon-ms) dargestellt. Bei vorhandenen Anwendungen können Sie das aktuelle Menüband erfassen, indem Sie temporär einige Codezeilen hinzufügen und anschließend den Menüband-Designer aufrufen. Nachdem die Menüband-Ressourcendatei erstellt wurde, können Sie den handgeschriebenen Menübandcode durch einige wenige Anweisungen ersetzen, die die Menübandressource laden.

Aufrufhierarchie

Im Fenster Aufrufhierarchie können Sie zu allen Funktionen navigieren, die von einer bestimmten Funktion aufgerufen wurden, oder zu allen Funktionen, die eine bestimmte Funktion aufrufen.

Tools

MFC-Klassen-Assistent

Visual C++ 2010 ist eine Neuauflage des hoch geschätzten MFC-Klassen-Assistenten. Mit dem MFC-Klassen-Assistenten können Sie einem Projekt komfortabel Klassen, Meldungen und Variablen hinzufügen, ohne die Quelldateien manuell bearbeiten zu müssen.

ATL-Steuerelement-Assistent

Der ATL-Steuerelement-Assistent füllt das ProgID-Feld nicht mehr automatisch auf. Wenn ein ATL-Steuerelement nicht über eine ProgID, verfügt, funktionieren andere Tools möglicherweise nicht damit. Ein Beispiel für ein Tool mit der Anforderung, dass Steuerelemente eine ProgID haben, ist das Dialogfeld ActiveX-Steuerelement einfügen. Weitere Informationen über das Dialogfeld finden Sie unter Dialogfeld "ActiveX-Steuerelement einfügen".

Referenz zum Microsoft Macro Assembler

Durch das Hinzufügen des YMMWORD-Datentyps werden die 256-Bit Multimediaoperanden unterstützt, die in den Intel Advanced Vector Extensions (AVX)-Anweisungen enthalten sind.

Siehe auch

Konzepte

Wichtige Änderungen in Visual C++

Weitere Ressourcen

Erste Schritte mit Visual C++ 2010