Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Program Visual Studio 2019 oferuje wiele aktualizacji i poprawek środowiska Microsoft C++. Usunęliśmy wiele usterek i problemów w kompilatorze i narzędziach. Wiele z tych problemów zostało przesłanych przez klientów za pośrednictwem opcji Zgłoś problem i Podaj sugestię w obszarze Wyślij opinię. Dziękujemy za zgłaszanie usterek!
Aby uzyskać więcej informacji na temat nowości we wszystkich programach Visual Studio, odwiedź stronę Co nowego w programie Visual Studio 2019. Aby uzyskać informacje na temat nowości w języku C++ w programie Visual Studio 2017, zobacz Co nowego w języku C++ w programie Visual Studio 2017. Aby uzyskać informacje na temat nowości w języku C++ w programie Visual Studio 2015 i starszych wersjach, zobacz Visual C++ What's New 2003–2015 (Co nowego w programie Visual C++ do 2015).
Co nowego w języku C++ w programie Visual Studio w wersji 16.11
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.11 można znaleźć w temacie What's New in Visual Studio 2019 version 16.11 (Co nowego w programie Visual Studio 2019 w wersji 16.11).
Kompilator obsługuje teraz tryb kompilatora
/std:c++20. Wcześniej funkcje języka C++20 były dostępne tylko w/std:c++latesttrybie w programie Visual Studio 2019. Funkcje, które pierwotnie wymagały/std:c++latesttrybu, działają teraz w/std:c++20trybie lub nowszym w najnowszych wersjach programu Visual Studio.Narzędzia LLVM dostarczane z programem Visual Studio zostały uaktualnione do wersji LLVM 12. Aby uzyskać szczegółowe informacje, zobacz uwagi do wydania LLVM.
Obsługa Clang-cl została zaktualizowana do LLVM 12.
Co nowego w języku C++ w programie Visual Studio w wersji 16.10
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.10 znajduje się w temacie What's New in Visual Studio 2019 version 16.10 (Co nowego w programie Visual Studio 2019 w wersji 16.10).
Wszystkie funkcje języka C++20 są teraz dostępne w obszarze
/std:c++latest. Chociaż implementacja standardów języka C++20 w języku MSVC (obecnie opublikowana przez standard ISO) jest kompletna, niektóre kluczowe funkcje biblioteki języka C++20 powinny zostać zmienione przez nadchodzące raporty o wadach (poprawki błędów ISO C++20), które mogą je zmienić w sposób niezgodny z interfejsem ABI. Aby uzyskać więcej informacji, zobacz Microsoft/STL Issue #1814 .- Dodano obsługę natychmiastowych funkcji i obsługę constinit języka C++20 w wersji 16.10
- Ostatnie elementy
<chrono>: nowe zegary, sekundy przestępne, strefy czasowe i analizowanie - Implementacja formatu tekstu za pomocą
<format>
/openmp:llvmjest teraz dostępny na x86 i ARM64, oprócz wersji x64Katalogi dołączane można teraz oznaczyć jako zewnętrzne z zindywidualizowanymi poziomami ostrzeżeń kompilacji i ustawieniami analizy kodu.
Dodano opcję
/await:strict, umożliwiającą korutyny w stylu C++20 we wcześniejszych trybach językowych.Wizualizacja debugera dla
std::coroutine_handle<T>teraz przedstawia oryginalną nazwę funkcji coroutine oraz jej sygnaturę i bieżący punkt wstrzymania.Teraz musisz zaakceptować lub odmówić odcisku palca klucza hosta przedstawionego przez serwer podczas dodawania nowego połączenia zdalnego w programie Visual Studio.
/externalDodano przełącznik do MSVC na potrzeby określania nagłówków, które powinny być traktowane jako zewnętrzne w celach ostrzegawczych.
Co nowego w języku C++ w programie Visual Studio w wersji 16.9
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.9 można znaleźć w temacie What's New in Visual Studio 2019 version 16.9 (Co nowego w programie Visual Studio 2019 w wersji 16.9).
-
Nasza obsługa oczyszczania adresów w systemie Windows jest poza trybem eksperymentalnym i osiągnęła ogólną dostępność.
Rozszerzona
RtlAllocateHeapobsługa, rozwiązano problem ze zgodnością z interceptoramiRtlCreateHeapiRtlAllocateHeappodczas tworzenia pul pamięci wykonywalnej.Dodano obsługę starszych
GlobalAllociLocalAllocrodzinnych funkcji pamięci. Te przechwytywacze można włączyć, ustawiając flagę środowiskaASAN_OPTIONS=windows_hook_legacy_allocators=true.Zaktualizowano komunikaty o błędach dla przeplatania pamięci w tle oraz niepowodzenia przechwytywania, aby wyraźnie zaznaczyć problemy i rozwiązania.
Integracja środowiska IDE może teraz obsługiwać kompletną kolekcję wyjątków, które może zgłaszać rozwiązanie ASan.
Kompilator i linker zasugerują wygenerowanie informacji debugowania, jeśli wykryją, że kompilujesz przy użyciu ASan, ale nie wygenerujesz informacji debugowania.
Teraz możesz wybierać wersję LLVM środowiska uruchomieniowego OpenMP przy użyciu nowego przełącznika
/openmp:llvmCL. Spowoduje to dodanie obsługi klauzulilastprivatew sekcji#pragma omporaz nieznakowych zmiennych indeksu wforpętlach równoległych. Przełącznik/openmp:llvmjest obecnie dostępny tylko dla celu amd64 i jest nadal eksperymentalny.Projekty CMake programu Visual Studio mają teraz najwyższej klasy obsługę zdalnego programowania w systemie Windows. Obejmuje to konfigurowanie projektu CMake do docelowego użycia w systemie Windows ARM64, wdrażanie projektu na komputerze zdalnym z systemem Windows i debugowanie projektu na komputerze zdalnym z systemem Windows z poziomu programu Visual Studio.
Wersja narzędzia Ninja dostarczana z programem Visual Studio w systemie Windows została zaktualizowana do wersji 1.10. Aby uzyskać więcej informacji na temat tego, co jest zawarte, zobacz uwagi o wydaniu Ninja 1.10.
Wersja narzędzia CMake dostarczana z programem Visual Studio została zaktualizowana do wersji 3.19. Aby uzyskać więcej informacji na temat zawartości, zobacz informacje o wydaniu narzędzia CMake 3.19.
IntelliSense:
Zwiększono stabilność oraz udoskonalono funkcjonalność zapewniania uzupełniania zaimportowanych modułów i jednostek nagłówka w IntelliSense.
Dodano funkcję umożliwiającą przejście do definicji w przypadku importów modułów, obsługę indeksowania dla
export {...}modułów i dokładniejsze odniesienia do modułów o tej samej nazwie.Ulepszono zgodność języka IntelliSense dla C++ poprzez dodanie obsługi inicjalizacji kopiującej tymczasowych obiektów w bezpośredniej inicjalizacji przez odwołanie,
__builtin_memcpy,__builtin_memmove, dostosowanie niespójności między funkcjamiconstexpriconsteval, wydłużonych okresów życia tymczasowych obiektów w wyrażeniach stałych oraz podobnych typów i wiązania przez odwołanie.Dodano funkcję uzupełniania dla elementów make_unique, make_shared, emplace i emplace_back, która umożliwia uzupełnianie na podstawie określonego parametru typu.
Kompilator MSVC określa teraz poprawne środowiska uruchomieniowe modułu czyszczącego adresy wymagane dla plików binarnych. Projekt programu Visual Studio automatycznie pobierze nowe zmiany. W przypadku używania narzędzia do oczyszczania adresów w wierszu polecenia wystarczy teraz przekazać
/fsanitize=addresstylko do kompilatora.Menedżer połączeń programu Visual Studio obsługuje teraz klucze prywatne przy użyciu algorytmu klucza publicznego ECDSA.
Zaktualizowano wersje LLVM i Clang dostarczone w naszym instalatorze do wersji 11. Aby uzyskać więcej informacji, zapoznaj się z uwagami do wydania dla LLVM i Clang.
Program Visual Studio będzie teraz używać zmiennych CMake z plików narzędziowych do konfiguracji IntelliSense. To zapewni lepsze środowisko programowania aplikacji osadzonych i aplikacji dla systemu Android.
Implementacja propozycji Więcej kontenerów Constexpr, która umożliwia zastosowanie destruktorów i nowych wyrażeń
constexpr. To utoruje drogę dla narzędzi takich jakconstexprstd::vectoristd::string.Rozszerzona obsługa technologii IntelliSense modułów języka C++20, w tym funkcji Przejdź do definicji, Przejdź do modułu i uzupełniania składowych.
Skrócone szablony funkcji są teraz obsługiwane w kompilatorze MSVC.
Co nowego w języku C++ w programie Visual Studio w wersji 16.8
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.8 znajduje się w temacie What's New in Visual Studio 2019 version 16.8 (Co nowego w programie Visual Studio 2019 w wersji 16.8).
C++20 Coroutines są teraz obsługiwane w obszarze
/std:c++latest(lub/std:c++20począwszy od programu Visual Studio 2019 w wersji 16.11) i nagłówka<coroutine>.Funkcja IntelliSense oferuje teraz obsługę elementu
<concepts>języka C++20 i nagłówków<ranges>oraz zmienianie nazw i przeglądanie definicji koncepcji.Nasza biblioteka STL obsługuje teraz większość zakresów języka C++20.
Program MSVC obsługuje teraz warunkowo trywialne specjalne funkcje składowe.
C11 i C17 są teraz obsługiwane w przełącznikach
/std:c11i/std:c17.Dodatkowe ulepszenia biblioteki STL obejmują pełną obsługę
std::atomic_ref,std::midpointistd::lerp, optymalizacje dlastd::execution::unseqoraz więcej.Uaktualniono wersję programu CMake dostarczanego z programem Visual Studio do wersji CMake 3.18.
Nasze narzędzia do analizy kodu obsługują teraz standard SARIF 2.1: standardowy w branży format statycznego dziennika analizy.
W przypadku braku narzędzi do kompilacji w projektach systemu Linux na pasku narzędzi będzie teraz wyświetlane ostrzeżenie, a lista błędów będzie zawierać jasny opis brakujących narzędzi.
Teraz można debugować zrzuty pamięci jądra systemu Linux na zdalnym systemie Linux lub WSL bezpośrednio z Visual Studio.
W przypadku generowania komentarzy C++ Doxygen dodaliśmy dodatkowe opcje stylu komentarza (
/*!i//!).Dodatkowe ogłoszenia dotyczące vcpkg.
Obsługa kompilatora dla wyrażeń lambda w niewyliczonych kontekstach.
/DEBUG:FULLwydajność linków została poprawiona dzięki wielowątkowemu procesowi tworzenia pliku PDB. W kilku dużych aplikacjach i grach AAA można zauważyć od 2 do 4 razy szybsze łączenie.Debuger programu Visual Studio obsługuje teraz program
char8_t.Obsługa projektów ARM64 przy użyciu clang-cl.
Obsługa funkcji wewnętrznych Intel AMX.
Co nowego w języku C++ w programie Visual Studio w wersji 16.7
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.7 znajduje się w temacie What's New in Visual Studio 2019 version 16.7 (Co nowego w programie Visual Studio 2019 w wersji 16.7).
Obsługa zdalna języka C++ obejmuje teraz szerszy zakres dystrybucji systemu Linux i powłok, w tym sh, csh, bash, tsch, ksh, zsh i dash. Można zmienić wybór powłoki dla połączenia zdalnego, modyfikując właściwość „shell” za pomocą programu ConnectionManager.exe. Obsługa została przetestowana zarówno z projektami Linuksa opartymi na MSBuild, jak i z projektami CMake, które są uruchamiane na zdalnym systemie Linux lub w podsystemie WSL.
Można teraz używać narzędzia Ninja (systemu kompilacji umożliwiającego bardzo szybką ocenę kompilacji przyrostowych), aby skrócić czas kompilacji przyrostowych dla projektów systemu Linux opartych na platformie MSBuild. Możesz wybrać tę funkcję, ustawiając właściwość „Włącz kompilację przyrostową” na wartość „Przy użyciu narzędzia Ninja” na stronie właściwości ogólnych. Na zdalnym systemie Linux lub w podsystemie WSL musi być zainstalowane narzędzie Ninja-build.
Zaimplementowano nowe funkcje biblioteki standardowej języka C++ 20. Aby uzyskać szczegółową listę, zobacz dziennik zmian biblioteki STL w witrynie GitHub.
Teraz można edytować i ustawiać domyślne połączenia zdalne SSH w menedżerze połączeń. Oznacza to, że można edytować istniejące połączenie zdalne (na przykład jeśli jego adres IP uległ zmianie) i ustawić domyślne połączenia, które mają być używane w CMakeSettings.json i launch.vs.json. Zdalne połączenia SSH umożliwiają tworzenie i debugowanie projektów języka C++ w zdalnym systemie Linux bezpośrednio z programu Visual Studio.
Ulepszono obsługę funkcji IntelliSense dla kompilatora clang w systemie Windows (clang-cl) w programie Visual Studio. Ścieżka dołączania kompilatora clang uwzględnia teraz biblioteki clang, ulepszono wyświetlanie zygzaków w edytorze podczas korzystania z biblioteki std oraz dodano obsługę języka C++ 2a w trybie clang.
Teraz można wypróbować funkcję podkreślania błędów kodu i wyświetlić więcej sugerowanych szybkich poprawek w projektach C++. Włącz tę funkcję w obszarze Narzędzia > Opcje > Edytor > tekstu C/C++ > Eksperymentalne. Ustaw opcję Disable Experimental Code Linter na wartość false. Więcej informacji znajduje się w blogu zespołu języka C++.
Dodaliśmy cztery nowe reguły analizy kodu, aby uwzględnić dodatkowe funkcje bezpieczeństwa w języku C++: C26817, C26818, C26819 i C26820.
Dodano wysokiej jakości obsługę debugowania projektów CMake w systemach zdalnych za pomocą programu gdbserver.
Można łatwo wykrywać błędy uszkodzeń pamięci dzięki eksperymentalnej implementacji elementu AddressSanitizer dla języka C++ w programie Visual Studio, która jest teraz dostępna dla projektów natywnych x64. Teraz obsługujemy również używanie środowisk uruchomieniowych do debugowania (
/MTd,/MDd,/LDd).IntelliSense ma teraz podstawową obsługę Concepts, desygnowanych inicjalizatorów oraz kilku innych funkcji z C++20.
.ixxpliki i.cppmsą teraz rozpoznawane jako C++ i są traktowane jako takie przez wyróżniacz składni i funkcję IntelliSense.
Co nowego w języku C++ w programie Visual Studio w wersji 16.6
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.6 można znaleźć w temacie What's New in Visual Studio 2019 version 16.6 (Co nowego w programie Visual Studio 2019 w wersji 16.6).
Ulepszone generowanie komentarzy Doxygen/XML: Automatyczne generowanie szablonów komentarzy Doxygen lub XML poprzez wpisanie
///lub/**nad funkcjami. Są one teraz wyświetlane także w podpowiedziach szybkiej informacji.Obsługa Ninja dla CMake dla Linuxa/WSL: Użyj narzędzia Ninja jako podstawowego generatora podczas kompilowania projektów CMake na WSL lub systemie zdalnym. Ninja jest teraz domyślnym generatorem podczas dodawania nowej konfiguracji systemu Linux lub WSL.
Szablony debugowania dla zdalnych projektów CMake: Uprościliśmy szablony do debugowania projektów CMake na zdalnym systemie Linux lub WSL za pomocą gdb.
Początkowa obsługa koncepcji języka C++20: Funkcja IntelliSense rozpoznaje teraz pojęcia języka C++20 i sugeruje je na liście elementów członkowskich.
Co nowego w języku C++ w programie Visual Studio w wersji 16.5
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.5 znajduje się w temacie What's New in Visual Studio 2019 version 16.5 (Co nowego w programie Visual Studio 2019 w wersji 16.5).
Obsługa modelu uzupełnień IntelliCode dla zespołów oraz zmiennych składowych: deweloperzy języka C++ mogą teraz trenować modele IntelliCode na własnych bazach kodu. Nazywamy to modelem uzupełniania zespołów, ponieważ korzystasz z rozwiązań Twojego zespołu. Ponadto ulepszono sugestie funkcji IntelliCode dotyczące zmiennych członkowskich.
Ulepszenia funkcji IntelliSense:
- Funkcja IntelliSense wyświetla teraz bardziej czytelne nazwy typów podczas pracy z biblioteką standardową.
- Dodaliśmy możliwość przełączania, czy Enter, Space i Tab działają jako znaki zatwierdzenia oraz przełączania, czy Tab jest używany do wstawiania fragmentów. Znajdź te ustawienia w obszarze Narzędzia > Opcje > Edytor > tekstu C/C++ > Advanced > IntelliSense.
Menedżer połączeń za pośrednictwem wiersza polecenia: Teraz możesz korzystać z przechowywanych połączeń zdalnych za pośrednictwem wiersza polecenia. Jest to przydatne w przypadku zadań, takich jak aprowizowanie nowej maszyny deweloperskiej lub konfigurowanie programu Visual Studio w ciągłej integracji.
Debugowanie i wdrażanie dla programu WSL: użyj natywnej obsługi programu Visual Studio dla programu WSL, aby oddzielić system kompilacji od systemu zdalnego wdrażania. Teraz możesz utworzyć natywnie w programie WSL i wdrożyć artefakty kompilacji w drugim zdalnym systemie na potrzeby debugowania. Ten przepływ pracy jest obsługiwany przez projekty języka CMake i projekty systemu Linux oparte na platformie MSBuild.
Obsługa trybu zgodności ze standardem FIPS 140-2: program Visual Studio obsługuje teraz tryb zgodności ze standardem FIPS 140-2 podczas tworzenia aplikacji C++, które są przeznaczone dla zdalnego systemu Linux.
Usługi językowe dla plików języka CMake i lepsze manipulowanie projektem CMake:
Zoptymalizowano kopię pliku źródłowego dla projektów CMake przeznaczonych dla zdalnego systemu Linux. Program Visual Studio zachowuje teraz „plik odcisku palca” ostatniego zestawu źródeł, który jest domyślnie kopiowany, i optymalizuje zachowanie na podstawie liczby zmienionych plików.
Funkcje nawigacji kodu, takie jak Przejdź do definicji i Znajdź wszystkie odwołania, są teraz obsługiwane dla funkcji, zmiennych i elementów docelowych w plikach skryptów narzędzia CMake.
Dodawaj, usuwaj i zmieniaj nazwy plików oraz elementów docelowych w projektach platformy CMake z poziomu środowiska IDE bez konieczności ręcznego edytowania skryptów CMake. Po dodaniu lub usunięciu plików w Eksploratorze rozwiązań program Visual Studio będzie automatycznie edytować projekt platformy CMake. Można również dodawać i usuwać elementy docelowe projektu oraz zmieniać ich nazwy z widoku elementów docelowych w Eksploratorze rozwiązań.
Ulepszenia projektu systemu Linux: projekty programu Visual Studio Dla systemu Linux mają teraz dokładniejszą funkcję IntelliSense i umożliwiają sterowanie synchronizacją nagłówków zdalnych na podstawie projektu.
Co nowego w języku C++ w programie Visual Studio w wersji 16.4
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.4 znajduje się w temacie What's New in Visual Studio 2019 version 16.4 (Co nowego w programie Visual Studio 2019 w wersji 16.4).
Analiza kodu obsługuje
Clang-Tidyteraz natywnie zarówno projekty MSBuild, jak i CMake, niezależnie od tego, czy używasz zestawu narzędzi Clang, czy MSVC. Testy zgodności z oprogramowaniem Clang mogą być uruchamiane w ramach analizy kodu w tle, wyświetlane jako ostrzeżenia w edytorze (zygzaki) i wyświetlane na liście błędów.Projekty Visual Studio CMake zawierają teraz strony Przegląd, które ułatwiają rozpoczęcie tworzenia aplikacji dla wielu platform. Te strony są dynamiczne i ułatwiają połączenie z systemem Linux oraz dodanie konfiguracji systemu Linux lub podsystemu WSL do projektu CMake.
Menu rozwijane dla uruchamiania projektów CMake wyświetla teraz ostatnio używane obiekty docelowe i można je filtrować.
Język C++/CLI obsługuje teraz międzyoperacyjność z platformą .NET Core w wersji 3.1 i wyższych w systemie Windows.
Możesz teraz włączyć narzędzie ASan dla projektów skompilowanych przy użyciu kompilatora MSVC w systemie Windows na potrzeby instrumentacji w czasie działania kodu C++, co ułatwia wykrywanie błędów pamięci.
Aktualizacje standardowej biblioteki języka C++ kompilatora MSVC:
- C++17: Zaimplementowano
to_chars()ogólną precyzję, kończąc P0067R5 konwersje ciągów podstawowych (charconv). Stanowi to uzupełnienie implementacji wszystkich funkcji biblioteki standardu C++17. - C++20: Zaimplementowano P1754R1 zmianę nazw koncepcji na standard_case. Aby uwzględnić te funkcje, użyj
/std:c++latestopcji kompilatora (lub/std:c++20począwszy od programu Visual Studio 2019 w wersji 16.11). Tę opcję można również ustawić na stronie właściwości projektu Właściwości > konfiguracji > C/C++ Język przy użyciu właściwości C++ Language Standard.
- C++17: Zaimplementowano
Dostępna jest nowa kolekcja narzędzi o nazwie C++ Build Insights . Aby uzyskać więcej informacji na temat ogłoszenia, zobacz blog zespołu języka C++.
Co nowego w języku C++ w programie Visual Studio w wersji 16.3
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.3 można znaleźć w temacie What's New in Visual Studio 2019 version 16.3 (Co nowego w programie Visual Studio 2019 w wersji 16.3).
Deweloperzy języka C++ mogą teraz przełączać komentarze liniowe przy użyciu skrótu klawiaturowego Ctrl+K, Ctrl+/.
Listy członków IntelliSense są teraz filtrowane na podstawie kwalifikatorów typów, na przykład
const std::vectorodfiltrowuje metody, takie jakpush_back.Dodaliśmy te elementy standardowej biblioteki C++20 (dostępne w
/std:c++latest, lub/std:c++20, począwszy od Visual Studio 2019 w wersji 16.11):-
P0487R1: naprawianie
operator>>(basic_istream&, CharT*) -
P0616R0: korzystanie z
move()w<numeric> -
P0758R1:
is_nothrow_convertible - P0734R0: rozszerzenia języka C++ dla pojęć
- P0898R3: Pojęcia dotyczące biblioteki standardowej
- P0919R3: heterogeniczne wyszukiwanie nieurządzanych kontenerów
-
P0487R1: naprawianie
Nowe testy podstawowych wytycznych języka C++, w tym nowy zestaw reguł "Reguły Enuma" oraz dodatkowe reguły
const,enum, i typów.Nowy domyślny schemat kolorowania semantycznego umożliwia użytkownikom lepsze szybkie zrozumienie kodu, okno stosu wywołań jest skonfigurowane, aby argumenty szablonu były ukrywane, a rozszerzenie IntelliCode dla języka C++ jest domyślnie włączone.
Konfiguruj elementy docelowe debugowania i zadania niestandardowe ze zmiennymi środowiskowymi przy użyciu plików CMakeSettings.json lub CppProperties.json lub nowego tagu „ENV” dla poszczególnych celów i zadań w plikach launch.vs.json i tasks.vs.json.
Użytkownicy mogą teraz użyć szybkiej akcji w przypadku brakujących pakietów narzędzia vcpkg, aby automatycznie otworzyć konsolę i zainstalować je w domyślnej instalacji narzędzia vcpkg.
Zdalna kopia nagłówka wykonywana przez projekty dla systemu Linux (CMake i MSBuild) została zoptymalizowana i jest teraz uruchamiana równolegle.
Natywna obsługa podsystemu WSL w programie Visual Studio obsługuje teraz równoległe kompilowanie projektów dla systemu Linux opartych na programie MSBuild.
Użytkownicy mogą teraz określić listę lokalnych wyników kompilacji do wdrożenia w systemie zdalnym za pomocą projektów Makefile dla systemu Linux.
Opisy ustawień w Edytorze ustawień narzędzia CMake zawierają teraz więcej kontekstu i linki do przydatnej dokumentacji.
Model podstawowy języka C++ dla funkcji IntelliCode jest teraz domyślnie włączony. To ustawienie można zmienić, przechodząc do obszaru Narzędzia>Opcje>IntelliCode.
Co nowego w języku C++ w programie Visual Studio w wersji 16.2
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.2 można znaleźć w temacie What's New in Visual Studio 2019 version 16.2 (Co nowego w programie Visual Studio 2019 w wersji 16.2).
W przypadku lokalnych projektów CMake skonfigurowanych przy użyciu oprogramowania Clang analiza kodu przeprowadza teraz kontrole zgodności z oprogramowaniem Clang, które wyglądają jak część analizy kodu w tle w formie ostrzeżeń w edytorze (zygzaki) i na liście błędów.
Zaktualizowano nagłówek
<charconv>konwersji ciągów podstawowych P0067R5 środowiska C++17:- Dodano przeciążenia zmiennoprzecinkowe
to_chars()dla precyzjichars_format::fixedichars_format::scientific(chars_format::general precisionjest jedyną częścią, której jeszcze nie zaimplementowano) - Zoptymalizowano najkrótszy
chars_format::fixed
- Dodano przeciążenia zmiennoprzecinkowe
Dodano następujące funkcje biblioteki standardowej języka C++20:
- Dostępne w obszarze
/std:c++latest(lub/std:c++20począwszy od programu Visual Studio 2019 w wersji 16.11): - Dostępne w obszarze
/std:c++17i/std:c++latest(lub/std:c++20począwszy od programu Visual Studio 2019 w wersji 16.11):-
P0600R1:
[[nodiscard]]w bibliotece
-
P0600R1:
- Dostępne bezwarunkowo:
- Dostępne w obszarze
Zestaw Windows SDK nie jest już zależnością składników CMake dla systemu Windows i CMake dla systemu Linux.
Ulepszenia konsolidatora języka C++ znacznie skracające czas kompilacji iteracji w przypadku dużej ilości danych wejściowych.
/DEBUG:FASTi/INCREMENTALczasy są średnio dwa razy szybsze, a/DEBUG:FULLteraz trzy do sześciu razy szybciej.
Co nowego w języku C++ w programie Visual Studio w wersji 16.1
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.1 znajduje się w temacie What's New in Visual Studio 2019 version 16.1 (Co nowego w programie Visual Studio 2019 w wersji 16.1).
kompilator C++
Te funkcje języka C++20 zostały zaimplementowane w kompilatorze języka C++, dostępnym w obszarze
/std:c++latest(lub/std:c++20począwszy od programu Visual Studio 2019 w wersji 16.11):- Zwiększona zdolność znajdowania szablonów funkcji za pomocą zależnego od argumentów wyszukiwania wyrażeń wywołania funkcji przy użyciu jawnych argumentów szablonu (P0846R0).
- Wyznaczona inicjalizacja (P0329R4), która umożliwia wybranie określonych członków w zagregowanej inicjalizacji, na przykład przy użyciu składni
Type t { .member = expr }.
Obsługa wyrażeń lambda została gruntownie przebudowana, co pozwoliło na usunięcie dużej liczby długotrwałych usterek. Ta zmiana jest domyślnie włączona w przypadku używania polecenia
/std:c++20lub/std:c++latest. W/std:c++17trybie językowym i w trybie domyślnym (/std:c++14) nowy analizator (parser) można włączyć przy użyciu/Zc:lambdaw Visual Studio 2019 w wersji 16.9 lub nowszej (wcześniej dostępnej jako/experimental:newLambdaProcessorpocząwszy od Visual Studio 2019 wersja 16.3), na przykład/std:c++17 /Zc:lambda.
Ulepszenia standardowej biblioteki języka C++
- Te funkcje języka C++20 zostały dodane do naszej implementacji standardowej biblioteki języka C++ dostępnej w obszarze
/std:c++latest:-
starts_withiends_withdlabasic_stringibasic_string_view. -
containsdla kontenerów powiązanych. -
remove,remove_ifiuniquedla obiektówlistiforward_listzwracają teraz obiektsize_type. -
shift_leftishift_rightdodane do obiektu<algorithm>.
-
Środowisko IDE języka C++
IntelliCode dla języka C++
IntelliCode jest teraz dostarczany jako składnik opcjonalny w zestawie narzędzi Rozwój aplikacji desktopowych z użyciem C++. Aby uzyskać więcej informacji, zobacz Ulepszone środowisko IntelliCode języka C++ teraz dostarczane z programem Visual Studio 2019.
Funkcja IntelliCode używa własnego obszernego szkolenia i kontekstu kodu, aby umieścić to, czego najprawdopodobniej użyjesz na początku listy uzupełniania. Często może wyeliminować konieczność przewijania listy w dół. W przypadku języka C++funkcja IntelliCode oferuje największą pomoc w przypadku korzystania z popularnych bibliotek, takich jak biblioteka standardowa.
Nowe funkcje intelliCode (niestandardowe modele, obsługa języka C++ i wnioskowanie EditorConfig) są domyślnie wyłączone. Aby je włączyć, przejdź do Narzędzia > Opcje > IntelliCode > Ogólne. Ta wersja funkcji IntelliCode działa z większą dokładnością i oferuje obsługę funkcji bezpłatnych. Aby uzyskać więcej informacji, zobacz Sugestie dotyczące uzupełniania kodu wspomaganego przez AI dla C++ w IntelliCode.
Usprawnienia funkcji szybkich informacji
- Etykietka narzędzia Szybkie informacje uwzględnia teraz kolorowanie semantyczne edytora. Zawiera on również nowe łącze Szukaj Online, które będzie przeszukiwać dokumentację online w poszukiwaniu informacji na temat konstrukcji kodu, nad którym unosi się wskaźnik myszy. Link udostępniony przez Szybkie Informacje dla czerwonego podkreślenia błędu w kodzie pozwoli wyszukać błąd online. W ten sposób nie trzeba ponownie wpisywać wiadomości w przeglądarce. Aby uzyskać więcej informacji, zobacz Quick Info Improvements in Visual Studio 2019: Colorization and Search Online (Szybkie ulepszenia informacji w programie Visual Studio 2019: kolorowanie i wyszukiwanie w trybie online).
Ogólne ulepszenia
Pasek szablonu może wypełniać menu rozwijane na podstawie wystąpień tego szablonu w bazie kodu.
Wskazówki dla brakujących
#includedyrektyw, które vcpkg może zainstalować, oraz automatyczne uzupełnianie dostępnych pakietów dla dyrektywy CMakefind_package.Strona właściwości ogólnej dla projektów języka C++ została poprawiona. Niektóre opcje są teraz wyświetlane na nowej stronie Zaawansowane . Strona Zaawansowane zawiera również nowe właściwości architektury preferowanego zestawu narzędzi, bibliotek debugowania, pomocniczej wersji zestawu narzędzi MSVC i kompilacji Unity (jumbo).
Obsługa narzędzia CMake
Zaktualizowaliśmy wersję narzędzia CMake dostarczaną z programem Visual Studio do wersji 3.14. Ta wersja dodaje wbudowaną obsługę generatorów MSBuild przeznaczonych dla projektów Visual Studio 2019 oraz interfejsów API integracji IDE opartych na plikach.
Dodaliśmy ulepszenia do Edytora Ustawień CMake, w tym obsługę Podsystemu Windows dla Linuksa (WSL) i konfiguracji z istniejących pamięci podręcznych, zmiany domyślnych ścieżek kompilacji i instalacji oraz obsługę zmiennych środowiskowych w konfiguracjach CMake dla Linuksa.
Uzupełnianie i szybki podgląd informacji dotyczących wbudowanych poleceń, zmiennych i właściwości w CMake ułatwiają edytowanie plików
CMakeLists.txt.Zintegrowaliśmy obsługę edytowania, kompilowania i debugowania projektów CMake za pomocą narzędzia Clang/LLVM. Aby uzyskać więcej informacji, zobacz Obsługa języka Clang/LLVM w programie Visual Studio.
Linux i Podsystem Windows dla systemu Linux
Obsługujemy teraz narzędzia AddressSanitizer (ASan) w projektach międzyplatformowych systemów Linux i CMake. Aby uzyskać więcej informacji, zobacz AddressSanitizer (ASan) dla obciążenia systemu Linux w programie Visual Studio 2019.
Zintegrowaliśmy obsługę programu Visual Studio do używania języka C++ z Podsystem Windows dla systemu Linux (WSL). Teraz możesz natywnie używać lokalnej instalacji Podsystemu Windows dla systemu Linux (WSL) z językiem C++ w programie Visual Studio bez dodatkowej konfiguracji lub połączenia SSH. Aby uzyskać więcej informacji, zobacz C++ w Visual Studio 2019 i Windows Subsystem for Linux (WSL).
Code Analysis
- Dodano nowe szybkie poprawki dotyczące niezainicjowanych testów zmiennych. Ostrzeżenia analizy kodu C6001: używanie niezainicjowanej pamięci
<variable>oraz C26494 VAR_USE_BEFORE_INIT są dostępne w menu pomocy (ikona żarówki) w odpowiednich wierszach. Są one domyślnie włączone odpowiednio w zestawie reguł Microsoft Native Minimum i w zestawie reguł C++ Core Check Type. Aby uzyskać więcej informacji, zobacz Szybkie poprawki w nowej analizie kodu dla niezainicjowanej pamięci (C6001) i użycia przed zainicjowaniem (C26494) ostrzeżeń.
Kompilacje zdalne
Teraz użytkownicy mogą oddzielić maszynę zdalnej kompilacji od maszyny zdalnego debugowania w przypadku korzystania z systemu Linux, zarówno w projektach MSBuild, jak i CMake.
Ulepszone rejestrowanie połączeń zdalnych ułatwia diagnozowanie problemów podczas programowania międzyplatformowego.
Co nowego w języku C++ w programie Visual Studio w wersji 16.0
Podsumowanie nowych funkcji i poprawek błędów w programie Visual Studio w wersji 16.0 można znaleźć w temacie What's New in Visual Studio 2019 version 16.0 (Co nowego w programie Visual Studio 2019 w wersji 16.0).
kompilator C++
Ulepszona obsługa funkcji języka C++17 i poprawek dotyczących poprawności, oraz eksperymentalna obsługa funkcji języka C++20, takich jak moduły i korutyny. Aby uzyskać szczegółowe informacje, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio 2019.
Opcja
/std:c++latestobejmuje teraz funkcje języka C++20, które nie muszą zostać ukończone, w tym początkową obsługę operatora<=>C++20 ("statek kosmiczny") na potrzeby porównania trzykierunkowego.Przełącznik
/Gmkompilatora języka C++ jest teraz przestarzały. Rozważ wyłączenie przełącznika/Gmw skryptach kompilacji, jeśli jest on jawnie zdefiniowany. Można jednak bezpiecznie zignorować ostrzeżenie o wycofaniu dla/Gmelementu, ponieważ nie jest ono traktowane jako błąd podczas używania opcji "Traktuj ostrzeżenia jako błędy" (/WX).Gdy program MSVC rozpoczyna implementowanie funkcji z wersji roboczej standardu C++20 pod flagą
/std:c++latest,/std:c++latestjest teraz niezgodny z/clr(wszystkie wersje),/ZWi/Gm. W programie Visual Studio 2019 użyj trybów/std:c++17lub/std:c++14podczas kompilowania za pomocą/clr,/ZWlub/Gm(ale zobacz poprzedni punkt).Prekompilowane nagłówki nie są już generowane domyślnie dla konsoli C++ i aplikacji klasycznych.
Codegen, zabezpieczenia, diagnostyka i przechowywanie wersji
Ulepszona analiza z /Qspectre w celu udzielenia pomocy w łagodzeniu skutków dla wariantu Spectre 1 (CVE-2017-5753). Aby uzyskać więcej informacji, zobacz Spectre Mitigations in MSVC (Środki zaradcze spectre w MSVC).
Ulepszenia standardowej biblioteki języka C++
Implementacja dodatkowych funkcji bibliotek języka C++17 i C++20 oraz poprawek poprawności. Aby uzyskać szczegółowe informacje, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio 2019.
Format Clang został zastosowany do nagłówków standardowej biblioteki języka C++ w celu zwiększenia czytelności.
Ponieważ Visual Studio obsługuje teraz funkcję Just My Code dla języka C++, biblioteka standardowa nie musi już zapewniać niestandardowych mechanizmów dla
std::functionistd::visit, aby osiągnąć ten sam efekt. Usunięcie tej maszyny w dużej mierze nie ma efektów widocznych dla użytkownika. Jednym z wyjątków jest to, że kompilator nie będzie już generował diagnostyki, która wskazuje na problemy w wierszach 15732480 lub 16707566<type_traits>lub<variant>.
Ulepszenia wydajności/przepływności w kompilatorze i bibliotece standardowej
Ulepszenia wydajności kompilacji, w tym sposób, w jaki linker obsługuje operacje wejścia/wyjścia plików, oraz czas łączenia podczas scalania i tworzenia typów PDB.
Dodano podstawową obsługę wektoryzacji SIMD OpenMP. Można ją włączyć za pomocą nowego przełącznika
/openmp:experimentalkompilatora . Ta opcja pozwala na potencjalną wektoryzację pętli z adnotacjami oznaczonymi#pragma omp simd. Wektoryzacja nie jest gwarantowana, a pętle, które są oznaczone adnotacjami, ale nie zostały zwektoryzowane, otrzymają ostrzeżenie. Nie są obsługiwane żadne klauzule SIMD; są one ignorowane i jest zgłaszane ostrzeżenie.Dodano nowy przełącznik inliningowy wiersza polecenia
/Ob3, który jest bardziej agresywną wersją/Ob2./O2(optymalizowanie pliku binarnego pod kątem szybkości) nadal oznacza/Ob2domyślnie. Jeśli okaże się, że kompilator nie wprowadza kodu wystarczająco agresywnie, rozważ przekazanie/O2 -Ob3elementu.Dodaliśmy obsługę funkcji wewnętrznych biblioteki SVML (Short Vector Math Library). Te funkcje obliczają odpowiedniki wektorów 128-bitowych, 256-bitowych lub 512-bitowych. Dodaliśmy je do obsługi ręcznej wektoryzacji pętli z wywołaniami funkcji biblioteki matematycznej i niektórych innych operacji, takich jak dzielenie liczb całkowitych. Aby uzyskać definicje obsługiwanych funkcji, zobacz Intel Intrinsic Guide (Przewodnik wewnętrzny firmy Intel).
Nowe i ulepszone optymalizacje:
Stałe składanie i uproszczenia arytmetyczne dla wyrażeń korzystających z wektorów SIMD, w formatach zmiennoprzecinkowym i całkowitym.
Bardziej zaawansowana analiza pozwalająca na wyodrębnienie informacji z przepływu sterowania (instrukcje if/else/switch) w celu usunięcia gałęzi, które zawsze są prawdziwe lub fałszywe.
Ulepszenie rozwijania pętli memset do użycia instrukcji wektorowych SSE2.
Ulepszono usuwanie bezużytecznych kopii struktur/klas, szczególnie w przypadku programów języka C++, które są przekazywane przez wartość.
Ulepszona optymalizacja kodu przy użyciu
memmove, takich jak konstrukcjestd::copylubstd::vector, istd::string.
Zoptymalizowano fizyczny projekt biblioteki standardowej, aby uniknąć kompilowania części, które nie są bezpośrednio zawarte w bibliotece standardowej. Ta zmiana zredukowała czas kompilacji pustego pliku, który zawiera tylko
<vector>, o połowę. W związku z tym może być konieczne dodanie#includedyrektyw dla nagłówków, które były wcześniej uwzględnione w sposób pośredni. Na przykład kod, który używastd::out_of_range, może teraz wymagać dodania elementu#include <stdexcept>. Kod używający operatora wstawiania strumienia może teraz potrzebować dodania elementu#include <ostream>. Zaletą jest to, że tylko jednostki tłumaczenia używające<stdexcept>lub<ostream>składnika płacą koszt przepustowości w celu ich skompilowania.if constexprzastosowano w większej liczbie miejsc w standardowej bibliotece w celu zwiększenia przepustowości i zmniejszenia rozmiaru kodu w operacjach kopiowania, w permutacjach, takich jak odwracanie i obracanie, oraz w bibliotece algorytmów równoległych.Biblioteka standardowa używa teraz wewnętrznie
if constexpr, aby skrócić czas kompilacji, nawet w trybie C++14.Wykrywanie dynamicznego łączenia w czasie wykonywania dla biblioteki algorytmów równoległych nie używa już całej strony do przechowywania tablicy wskaźników funkcji. Oznaczenie tej pamięci tylko do odczytu zostało uznane za nieistotne w celach bezpieczeństwa.
Konstruktor
std::threadnie czeka już na uruchomienie wątku i nie wstawia już tak wielu warstw wywołań funkcji między bazową biblioteką_beginthreadexC a dostarczonym obiektem wywołującym.std::threadWcześniej umieścił sześć funkcji między_beginthreadexa dostarczonym obiektem wywoływanym. Liczba ta została zmniejszona do trzech, z których dwie to tylkostd::invoke. Ta zmiana usuwa również niejasny problem z synchronizacją, gdziestd::threadkonstruktor przestawał odpowiadać, jeśli zegar systemowy zmienił się dokładnie w momencie utworzeniastd::thread.Naprawiono regresję wydajności w
std::hash, którą wprowadziliśmy podczas implementowaniastd::hash<std::filesystem::path>programu.Biblioteka standardowa używa teraz destruktorów zamiast bloków catch w kilku miejscach, aby zapewnić poprawność działania. Ta zmiana prowadzi do lepszej interakcji z debugerem: wyjątki, które zgłaszasz poprzez bibliotekę standardową w tych lokalizacjach, są teraz wyświetlane jako rzucone z ich oryginalnego miejsca rzucenia, a nie z naszego ponownego rzucenia. Nie wszystkie standardowe bloki przechwytywania bibliotek zostały wyeliminowane. Oczekujemy, że liczba bloków catch zostanie zmniejszona w kolejnych wersjach MSVC.
Nieoptymalne generowanie kodu spowodowane przez warunkowe zgłaszanie wyjątku wewnątrz funkcji
noexceptzostało naprawione poprzez wydzielenie ścieżki zgłaszającej.Rodzina
std::lististd::unordered_*używa niedebugujących iteratorów wewnętrznie w wielu miejscach.Kilka
std::listelementów członkowskich zmieniono, aby umożliwić ponowne użycie węzłów listy, gdzie było to możliwe, zamiast ich zwalniania i ponownego przydzielania. Na przykład, biorąc pod uwagęlist<int>, który ma już rozmiar 3, wywołanieassign(4, 1729)teraz zastępuje wartościintw pierwszych trzech węzłach listy i alokuje jeden nowy węzeł listy z wartością 1729.Wszystkie standardowe wywołania funkcji biblioteki
erase(begin(), end())zostały zmienione naclear().std::vectorteraz inicjuje i usuwa elementy wydajniej w niektórych przypadkach.Ulepszenia w
std::variantw celu zwiększenia zgodności z optymalizatorem, co skutkuje lepszym generowaniem kodu. Inlining kodu jest teraz znacznie lepsze z użyciemstd::visit.
Środowisko IDE języka C++
Obsługa języka C++ w programie Live Share
Usługa Live Share obsługuje teraz język C++, umożliwiając deweloperom współpracę w czasie rzeczywistym przy użyciu programu Visual Studio lub Visual Studio Code. Aby uzyskać więcej informacji, zobacz Ogłoszenie funkcji Live Share dla C++: udostępnianie i współpraca w czasie rzeczywistym
IntelliSense szablonu
Pasek Szablonów teraz używa interfejsu użytkownika Widok podglądu zamiast okna modalnego, obsługuje zagnieżdżone szablony i wstępnie wypełnia w oknie podglądu wszystkie domyślne argumenty. Aby uzyskać więcej informacji, zobacz Template IntelliSense Improvements for Visual Studio 2019 Preview 2 (Ulepszenia funkcji IntelliSense szablonu dla programu Visual Studio 2019 w wersji zapoznawczej 2). Lista rozwijana Ostatnio używane na Pasku Szablonów umożliwia szybkie przełączanie się między poprzednimi zestawami przykładowych argumentów.
Nowe środowisko okna uruchamiania
Podczas uruchamiania środowiska IDE zostanie wyświetlone nowe okno uruchamiania. Dostępne są opcje otwierania ostatnich projektów, klonowania kodu z kontroli źródła, otwierania kodu lokalnego jako rozwiązania lub folderu albo tworzenia nowego projektu. Okno dialogowe Nowy projekt zostało również całkowicie zmienione, oferując teraz środowisko oparte na wyszukiwaniu z możliwością filtrowania.
Nowe nazwy niektórych szablonów projektów
Zmodyfikowaliśmy kilka nazw i opisów szablonów projektu, aby dopasować je do zaktualizowanego okna dialogowego Nowy projekt.
Różne ulepszenia produktywności
Visual Studio 2019 zawiera następujące funkcje, które ułatwiają kodowanie, czyniąc je bardziej intuicyjnym:
- Szybkie poprawki dla:
- Dodaj brakujące
#include -
NULLdonullptr - Dodaj brakujący średnik
- Rozwiązywanie problemu z brakującą przestrzenią nazw lub zakresem
- Zamień nieprawidłowe operandy pośrednie (
*na&i&na*)
- Dodaj brakujące
- Szybkie informacje o bloku przez najechanie myszką na zamykającą klamrę
- Podgląd pliku nagłówkowego/pliku kodu
- Przejdź do definicji na
#include, aby otworzyć plik
Aby uzyskać więcej informacji, zobacz Ulepszenia produktywności języka C++ w programie Visual Studio 2019 (wersja zapoznawcza 2).
Obsługa narzędzia CMake
Obsługa narzędzia CMake 3.14
Program Visual Studio może teraz otwierać istniejące pamięci podręczne CMake, wygenerowane przez narzędzia zewnętrzne, takie jak CMakeGUI, dostosowane systemy meta-build lub skrypty kompilacji, które same wywołują cmake.exe.
Ulepszona wydajność funkcji IntelliSense.
Nowy edytor ustawień stanowi alternatywę dla ręcznego edytowania pliku CMakeSettings.json i zapewnia parzystość z CMakeGUI.
Program Visual Studio ułatwia rozpoczęcie programowania w języku C++ za pomocą narzędzia CMake w systemie Linux, wykrywając, czy na komputerze z systemem Linux znajduje się zgodna wersja narzędzia CMake. W przeciwnym razie oferuje jego zainstalowanie dla Ciebie.
Niezgodne ustawienia w pliku CMakeSettings, takie jak niedopasowane architektury lub niezgodne ustawienia generatora narzędzia CMake, pokazują zygzaki w edytorze JSON i błędy na liście błędów.
W projektach CMake otwieranych w środowisku IDE po uruchomieniu polecenia
vcpkg integrate installautomatycznie jest wykrywany i włączany łańcuch narzędzi vcpkg. To zachowanie można wyłączyć, określając pusty plik łańcucha narzędzi w pliku CMakeSettings.W projektach CMake domyślnie jest teraz włączane debugowanie Tylko mój kod.
Ostrzeżenia analizy statycznej są teraz przetwarzane w tle i wyświetlane w edytorze dla projektów CMake.
Jaśniejsze komunikaty "begin" i "end" dotyczące budowania i konfigurowania projektów CMake oraz wsparcie dla interfejsu użytkownika pokazującego postęp kompilacji w Visual Studio. Ponadto, w ustawieniach Tools > Options dodano teraz opcję szczegółowości CMake, aby dostosować poziom szczegółowości komunikatów kompilacji i konfiguracji w oknie wyników.
Ustawienie
cmakeToolchainjest teraz obsługiwane w CMakeSettings.json do określania łańcuchów narzędzi bez ręcznego modyfikowania wiersza polecenia narzędzia CMake.Nowy skrót menu Kompiluj wszystkoCtrl+Shift+B.
Integracja incrediBuild
IncrediBuild jest dołączany jako opcjonalny składnik w pracy z C++ w środowisku desktop. Monitor kompilacji IncrediBuild jest w pełni zintegrowany w środowisku IDE programu Visual Studio. Aby uzyskać więcej informacji, zobacz Visualize your build with IncrediBuild's Build Monitor and Visual Studio 2019 (Wizualizowanie kompilacji za pomocą monitora kompilacji programu IncrediBuild i programu Visual Studio 2019).
Debugowanie
W przypadku aplikacji C++ działających w systemie Windows pliki PDB są teraz ładowane w osobnym procesie 64-bitowym. Zmiana ta dotyczy szeregu awarii spowodowanych wyczerpaniem pamięci w debugerze. Na przykład podczas debugowania aplikacji zawierających dużą liczbę modułów i plików PDB.
Wyszukiwanie jest włączone w oknach Watch, Autos i Locals .
Programowanie aplikacji desktopowych dla systemu Windows z użyciem C++
Te kreatory ATL/MFC dla języka C++ nie są już dostępne.
- Kreator komponentów ATL COM+ 1.0
- Kreator składników stron aktywnego serwera ATL
- Kreator dostawcy interfejsu OLE DB ATL
- Kreator strony właściwości ATL
- Kreator konsumenta OLE DB ATL
- Klient MFC ODBC
- Klasa MFC z kontrolki ActiveX
- Klasa MFC z Biblioteki typów.
Przykładowy kod dla tych technologii jest archiwizowany w środowisku Microsoft Learn i repozytorium GitHub VCSamples.
Zestaw Sdk (Software Development Kit) systemu Windows 8.1 nie jest już dostępny w instalatorze programu Visual Studio. Zalecamy uaktualnienie projektów języka C++ do najnowszego zestawu Windows SDK. Jeśli masz stałą zależność od systemu w wersji 8.1, możesz pobrać go z archiwum zestawu Windows SDK.
Obsługa systemu Windows XP nie będzie już dostępna w najnowszym zestawie narzędzi języka C++. Funkcja kierowania xp z kompilatorem I bibliotekami MSVC na poziomie programu VS 2017 jest nadal obsługiwana i może być instalowana za pośrednictwem "Poszczególnych składników".
Nasza dokumentacja aktywnie zniechęca do użycia modułów scalania w przypadku wdrożenia środowiska uruchomieniowego Visual C++. Robimy dodatkowy krok w tej wersji oznaczania naszych maszyn MSM jako przestarzałych. Rozważ migrację wdrożenia centralnego VCRuntime z plików MSM do pakietu redystrybucyjnego.
Programowanie aplikacji mobilnych za pomocą języka C++ (Android i iOS)
Środowiskiem systemu Android dla języka C++ jest teraz domyślnie zestaw SDK 25 dla systemu Android i zestaw NDK 16b dla systemu Android.
Zestaw narzędzi platformy Clang/C2
Składnik eksperymentalny Clang/C2 został usunięty. Użyj zestawu narzędzi MSVC, aby uzyskać pełną zgodność ze standardami języka C++ z /permissive- i /std:c++17, lub zestawu narzędzi Clang/LLVM dla systemu Windows.
Analiza kodu
Analiza kodu działa teraz automatycznie w tle. Ostrzeżenia są wyświetlane podczas pisania jako zielone podkreślenia w edytorze. Aby uzyskać więcej informacji, zobacz Analiza kodu w edytorze w programie Visual Studio 2019 (wersja zapoznawcza 2).
Nowe eksperymentalne reguły ConcurrencyCheck dla dobrze znanych standardowych typów biblioteki z nagłówka
<mutex>. Aby uzyskać więcej informacji, zobacz Concurrency Code Analysis in Visual Studio 2019 (Analiza kodu współbieżności w programie Visual Studio 2019).Zaktualizowana częściowa implementacja sprawdzacza profilu życia, która wykrywa zwisające wskaźniki i odwołania. Aby uzyskać więcej informacji, zobacz Lifetime Profile Update w Visual Studio 2019 (wersja zapoznawcza 2).
Więcej kontroli związanych z korutyną, w tym C26138, C26810, C26811 i eksperymentalna reguła C26800. Aby uzyskać więcej informacji, zobacz New Code Analysis Checks in Visual Studio 2019: use-after-move and coroutine (Sprawdzanie nowej analizy kodu w programie Visual Studio 2019: use-after-move i coroutine).
Testowanie jednostek
Szablon zarządzanego projektu testowego w języku C++ nie jest już dostępny. W istniejących projektach możesz nadal korzystać z platformy Test zarządzanego języka C++. W przypadku nowych testów jednostkowych rozważ użycie jednej z natywnych struktur testowych, dla których program Visual Studio udostępnia szablony (MSTest, Google Test) lub zarządzany projekt testowy języka C#.