Co nowego w języku C++ w programie Visual Studio 2019
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). Aby uzyskać więcej informacji, zobacz Dokumentacja języka Microsoft C++: Co nowego.
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++latest
trybie w programie Visual Studio 2019. Funkcje, które pierwotnie wymagały/std:c++latest
trybu, działają teraz w/std:c++20
trybie lub nowszym w najnowszych wersjach programu Visual Studio.Narzędzia LLVM dostarczane z programem Visual Studio zostały uaktualnione do maszyny WIRTUALNEJ LLVM 12. Aby uzyskać szczegółowe informacje, zobacz informacje o wersji maszyny wirtualnej LLVM.
Obsługa języka Clang-cl została zaktualizowana do maszyny WIRTUALNEJ 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 constinit języka C++20 w wersji 16.10
- Ostatnie elementy
<chrono>
: nowe zegary, sekundy przestępne, strefy czasowe i analizowanie - Implementacja
<format>
formatowania tekstu
/openmp:llvm
jest teraz dostępny na x86 i ARM64, oprócz x64Katalogi dołączania można teraz wyznaczyć jako zewnętrzne z dostosowanymi poziomami ostrzeżeń kompilacji i ustawieniami analizy kodu.
Dodano opcję włączania
/await:strict
współistnienia języka C++20 we wcześniejszych trybach językowych.Wizualizacja debugera zawiera
std::coroutine_handle<T>
teraz oryginalną nazwę i sygnaturę funkcji coroutine oraz 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.
/external
Dodano 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
RtlAllocateHeap
obsługa, rozwiązała problem ze zgodnością z elementamiRtlCreateHeap
iRtlAllocateHeap
przechwytujących podczas tworzenia pul pamięci wykonywalnej.Dodano obsługę starszych
GlobalAlloc
iLocalAlloc
rodzinnych funkcji pamięci. Te przechwytniki można włączyć, ustawiając flagęASAN_OPTIONS=windows_hook_legacy_allocators=true
środowiska .Zaktualizowano komunikaty o błędach stosowane w przypadku niepowodzenia przejmowania i przeplatania pamięci w tle, aby umożliwić jawną obsługę problemów i rozwiązań.
Integracja środowiska IDE może teraz obsługiwać kompletną kolekcję wyjątków, które może zgłaszać rozwiązanie ASan.
Kompilator i konsolidator sugerują emitowanie informacji debugowania, jeśli wykryje, że kompilujesz przy użyciu rozwiązania ASan, ale nie emituje informacji debugowania.
Teraz możesz kierować maszynę wirtualną LLVM do środowiska uruchomieniowego OpenMP przy użyciu nowego przełącznika
/openmp:llvm
CL . Spowoduje to dodanie obsługi klauzulilastprivate
dotyczącej#pragma omp
sekcji i niepodpisanych zmiennych indeksu w pętlach równoległychfor
. Przełącznik/openmp:llvm
jest 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 uwzględnionych informacji, zobacz Informacje o wersji 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 uwzględnionych informacji, zobacz informacje o wersji narzędzia CMake 3.19.
IntelliSense:
Zwiększono stabilność i udoskonalono funkcjonalność w zakresie zapewniania zaimportowanych modułów oraz uzupełniania jednostek nagłówka w funkcji IntelliSense.
Dodano obsługę języka Go-to-definition w przypadku importów modułów, obsługę indeksowania dla
export {...}
modułów i dokładniejsze informacje dotyczące modułów o tej samej nazwie.Ulepszono zgodność języka funkcji IntelliSense języka C++, dodając obsługę inicjowania kopii tymczasowego w metodzie bezpośredniej inicjowania
__builtin_memcpy
odwołań oraz__builtin_memmove
, Naprawianie niespójności między funkcjamiconstexpr
iconsteval
, tymczasowe okresy istnienia w wyrażeniach stałych oraz Podobne typy i powiązanie odwołania.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=address
tylko do kompilatora.Menedżer połączeń programu Visual Studio obsługuje teraz klucze prywatne przy użyciu algorytmu klucza publicznego ECDSA.
Zaktualizowano wersje maszyny wirtualnej niskiego poziomu i narzędzia Clang dostarczone w naszym instalatorze do wersji 11. Aby uzyskać więcej informacji, zapoznaj się z informacjami o wersji dotyczącymi maszyny wirtualnej niskiego poziomu i narzędzia Clang.
Program Visual Studio będzie teraz używać zmiennych narzędzia CMake z plików łańcucha narzędzi w celu skonfigurowania funkcji IntelliSense. To zapewni lepsze środowisko programowania aplikacji osadzonych i aplikacji dla systemu Android.
Implementacja propozycji Więcej kontenerów Constexpr, która umożliwia destruktorom i nowym wyrażeniom wartość
constexpr
. To utoruje drogę dla narzędzi takich jakconstexpr
std::vector
istd::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++20
począ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:c11
i/std:c17
.Dodatkowe ulepszenia biblioteki STL obejmują pełną obsługę
std::atomic_ref
std::midpoint
funkcji , i istd::lerp
std::execution::unseq
, optymalizacji dlastd::reverse_copy
systemu i innych elementów.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 systemu Linux w zdalnym systemie Linux lub podsystemie WSL bezpośrednio z poziomu programu Visual Studio.
W przypadku generowania komentarzy C++ Doxygen dodaliśmy dodatkowe opcje stylu komentarza (
/*!
i//!
).Dodatkowe ogłoszenia vcpkg.
Obsługa kompilatora dla wyrażeń lambda w nieowartych kontekstach.
/DEBUG:FULL
wydajność linków zwiększona dzięki tworzeniu pliku PDB wielowątkowego. 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 zastąpić wybór powłoki na potrzeby połączenia zdalnego, modyfikując nową właściwość „shell” przy użyciu programu ConnectionManager.exe. Obsługa została przetestowana zarówno z projektami systemu Linux opartymi na platformie MSBuild, jak i z projektami platformy CMake używanymi ze zdalnym systemem Linux lub podsystemem 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. W zdalnym systemie Linux lub podsystemie WSL musi być zainstalowane narzędzi Ninja (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 wartość Disable Experimental Code Linter na 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 debugowania (
/MTd
,/MDd
,/LDd
).Funkcja IntelliSense obejmuje teraz podstawową obsługę pojęć, wyznaczonych inicjatorów i kilku innych funkcji języka C++20.
.ixx
pliki i.cppm
są 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 wycinków komentarzy doxygen lub XML przez wpisanie
///
lub/**
powyższe funkcje. Są one teraz wyświetlane także w etykietkach Szybka podpowiedź.Obsługa narzędzia Ninja dla narzędzia CMake dla systemu Linux/WSL: użyj narzędzia Ninja jako podstawowego generatora podczas kompilowania projektów CMake w systemie WSL lub systemie zdalnym. Ninja jest teraz domyślnym generatorem podczas dodawania nowej konfiguracji systemu Linux lub WSL.
Szablony debugowania do zdalnego debugowania narzędzia CMake: uprościliśmy szablony debugowania projektów CMake w zdalnym systemie Linux lub WSL za pomocą bazy danych 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łniania zespołu i zmiennych składowych funkcji IntelliCode: 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 funkcji Enter, Spacja i Tab jako znaki zatwierdzenia oraz przełączania, czy karta jest używana do wstawiania fragmentu kodu. 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-Tidy
teraz 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 uruchamiania dla 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 koncepcje zmiany nazwy P1754R1 w celu standard_case. Aby uwzględnić te funkcje, użyj
/std:c++latest
opcji kompilatora (lub/std:c++20
począ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 języka C/C++ 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 elementów członkowskich funkcji IntelliSense są teraz filtrowane na podstawie kwalifikatorów typów,
const std::vector
na przykład odfiltrowuje metody, takie jakpush_back
.Dodaliśmy te funkcje biblioteki standardowej języka C++20 (dostępne w programie
/std:c++latest
lub/std:c++20
począwszy od programu Visual Studio 2019 w wersji 16.11):- P0487R1: naprawianie
operator>>(basic_istream&, CharT*)
- P0616R0: korzystanie z funkcji
move()
In<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ł wyliczenia i dodatkowe
const
reguły typów ,enum
i .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 danych wyjściowych kompilacji do wdrożenia w systemie zdalnym przy użyciu projektów pliku reguł programu make 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::fixed
ichars_format::scientific
(chars_format::general precision
jest jedyną częścią, której jeszcze nie zaimplementowano) - Zoptymalizowano najkrótszy element
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++20
począwszy od programu Visual Studio 2019 w wersji 16.11): - Dostępne w obszarze
/std:c++17
i/std:c++latest
(lub/std:c++20
począ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:FAST
i/INCREMENTAL
czasy są średnio dwa razy szybsze, a/DEBUG:FULL
teraz 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++20
począ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 elementów członkowskich w zagregowanej inicjalizacji, na przykład przy użyciu
Type t { .member = expr }
składni.
Obsługa wyrażeń lambda została przebudowana w celu naprawienia dużej liczby długotrwałych usterek. Ta zmiana jest domyślnie włączona w przypadku używania polecenia
/std:c++20
lub/std:c++latest
. W/std:c++17
trybie językowym i w trybie domyślnym (/std:c++14
) nowy analizator można włączyć przy użyciu/Zc:lambda
programu Visual Studio 2019 w wersji 16.9 lub nowszej (wcześniej dostępnej jako/experimental:newLambdaProcessor
począwszy od programu Visual Studio 2019 w wersji 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_with
i dlabasic_string
ibasic_string_view
ends_with
.contains
dla kontenerów asocjacyjnych.remove
,remove_if
iunique
dla obiektówlist
iforward_list
zwracają teraz obiektsize_type
.shift_left
ishift_right
dodane do obiektu<algorithm>
.
Środowisko IDE języka C++
IntelliCode dla języka C++
Funkcja IntelliCode jest teraz dostarczana jako składnik opcjonalny w obciążeniu Programowanie aplikacji klasycznych z językiem 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 pozycji Narzędzia > Opcje > Ogólne funkcji IntelliCode>. 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 AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode (Sugestie dotyczące uzupełniania kodu wspomaganego przez sztuczną inteligencję w języku C++) za pośrednictwem funkcji IntelliCode.
Ulepszenia szybkich informacji
- Etykietka narzędzia Szybkie informacje uwzględnia teraz kolorowanie semantyczne edytora. Zawiera on również nowy link Search Online , który będzie wyszukiwać w dokumentacji online, aby uzyskać informacje na temat konstrukcji kodu aktywowanego wskaźnika myszy. Link udostępniony przez szybkie informacje dla czerwonego zygzakowany kod wyszuka błąd w trybie 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.
Żarówki dla brakujących
#include
dyrektyw, które vcpkg mogą instalować, i autouzupeł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 preferowanej architektury zestawu narzędzi, bibliotek debugowania, pomocniczej wersji zestawu narzędzi MSVC i kompilacji aparatu 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 programu MSBuild przeznaczonych dla projektów programu Visual Studio 2019 r oraz interfejsów API integracji środowiska IDE opartych na plikach.
Dodaliśmy ulepszenia edytora ustawień narzędzia CMake, w tym obsługę Podsystem Windows dla systemu Linux (WSL) i konfiguracji z istniejących pamięci podręcznych, zmiany domyślnych katalogów głównych kompilacji i instalacji oraz obsługę zmiennych środowiskowych w konfiguracjach narzędzia CMake systemu Linux.
Uzupełnianie i szybkie informacje dotyczące wbudowanych poleceń, zmiennych i właściwości narzędzia CMake ułatwiają edytowanie
CMakeLists.txt
plików.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 użyć lokalnej instalacji Podsystem Windows dla systemu Linux (WSL) z językiem C++ natywnie w programie Visual Studio bez dodatkowej konfiguracji lub połączenia SSH. Aby uzyskać więcej informacji, zobacz C++ with Visual Studio 2019 and Podsystem Windows dla systemu Linux (WSL) (C++ with Visual Studio 2019 and Podsystem Windows dla systemu Linux (WSL) (C++ with Visual Studio 2019 and Podsystem Windows dla systemu Linux (WSL) (C++ with Visual Studio 2019 and
Analiza kodu
- Dodano nowe szybkie poprawki dotyczące niezainicjowanych testów zmiennych. Ostrzeżenia analizy kodu C6001: używanie niezainicjowanej pamięci
<variable>
i C26494 VAR_USE_BEFORE_INIT są dostępne w menu żarówki w odpowiednich wierszach. Są one domyślnie włączone w zestawie reguł Microsoft Native Minimum i zestawach reguł typów sprawdzania podstawowego języka C++ odpowiednio. Aby uzyskać więcej informacji, zobacz Szybkie poprawki nowej analizy kodu dla niezainicjowanej pamięci (C6001) i użyj przed zainicjowaniem (C26494) ostrzeżenia.
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 i poprawek poprawności języka C++17 oraz eksperymentalna obsługa funkcji języka C++20, takich jak moduły i kohroutines. Aby uzyskać szczegółowe informacje, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio 2019.
Opcja
/std:c++latest
obejmuje 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
/Gm
kompilatora języka C++ jest teraz przestarzały. Rozważ wyłączenie przełącznika/Gm
w skryptach kompilacji, jeśli jest on jawnie zdefiniowany. Można jednak bezpiecznie zignorować ostrzeżenie o wycofaniu dla/Gm
elementu , ponieważ nie jest on traktowany jako błąd podczas używania polecenia "Traktuj ostrzeżenia jako błędy" (/WX
).Gdy program MSVC rozpoczyna implementowanie funkcji ze standardowej wersji roboczej języka C++20 pod flagą
/std:c++latest
,/std:c++latest
jest teraz niezgodny z/clr
(wszystkie smaki),/ZW
i/Gm
. W programie Visual Studio 2019 użyj trybów/std:c++17
lub/std:c++14
podczas kompilowania za pomocą/clr
metody ,/ZW
lub/Gm
(ale zobacz poprzedni punktor).Prekompilowane nagłówki nie są już generowane domyślnie dla konsoli C++ i aplikacji klasycznych.
Codegen, zabezpieczenia, diagnostyka i przechowywanie wersji
Ulepszona analiza w /Qspectre
celu zapewnienia pomocy w zakresie ograniczania ryzyka 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ż program Visual Studio obsługuje teraz tylko mój kod dla języka C++, biblioteka standardowa nie musi już zapewniać niestandardowych maszyn i
std::function
std::visit
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ż tworzyć diagnostyki, która wskazuje problemy w 15732480 wiersza lub 16707566<type_traits>
lub<variant>
.
Ulepszenia wydajności/przepływności w kompilatorze i bibliotece standardowej
Ulepszenia przepływności kompilacji, w tym sposób, w jaki konsolidator obsługuje operacje we/wy plików i czas łączenia w scalaniu i tworzeniu typu PDB.
Dodano podstawową obsługę wektoryzacji SIMD openMP. Można ją włączyć za pomocą nowego przełącznika
/openmp:experimental
kompilatora . Ta opcja umożliwia dodawanie adnotacji do pętli z#pragma omp simd
potencjalnie wektoryzacją. Wektoryzacja nie jest gwarantowana, a pętle z adnotacjami, ale niewektoryzowane, otrzymają zgłoszone ostrzeżenie. Nie są obsługiwane żadne klauzule SIMD; są one ignorowane i jest zgłaszane ostrzeżenie.Dodano nowy wbudowany przełącznik
/Ob3
wiersza polecenia , który jest bardziej agresywną wersją programu/Ob2
./O2
(optymalizowanie pliku binarnego pod kątem szybkości) nadal oznacza/Ob2
domyślnie. Jeśli okaże się, że kompilator nie jest wystarczająco agresywnie wbudowany, rozważ przekazanie/O2 -Ob3
elementu .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:
Zwijania stałe i uproszczenia arytmetyczne dla wyrażeń korzystających z wektorów SIMD, zarówno dla formularzy zmiennoprzecinkowych, jak i całkowitych.
Bardziej zaawansowana analiza wyodrębniania informacji z przepływu sterowania (instrukcje if/else/switch) w celu usunięcia gałęzi zawsze okazały się prawdziwe lub fałszywe.
Ulepszone wyrejestrowywanie zestawu memset w celu używania instrukcji wektorów SSE2.
Ulepszono usuwanie bezużytecznych kopii struktur/klas, szczególnie w przypadku programów języka C++, które przechodzą według wartości.
Ulepszona optymalizacja kodu przy użyciu elementów
memmove
, takich jakstd::copy
lubstd::vector
istd::string
konstrukcja.
Zoptymalizowano projekt fizyczny biblioteki standardowej, aby uniknąć kompilowania części standardowej biblioteki nieuwzględnianej bezpośrednio. Ta zmiana ogranicza czas kompilacji pustego pliku, który obejmuje tylko
<vector>
połowę. W związku z tym może być konieczne dodanie#include
dyrektyw dla nagłówków, które zostały wcześniej uwzględnione pośrednio. Na przykład kod, którego używastd::out_of_range
, może teraz wymagać dodania#include <stdexcept>
elementu . Kod używający operatora wstawiania strumienia może teraz wymagać dodania#include <ostream>
elementu . Zaletą jest to, że tylko jednostki tłumaczenia faktycznie używające<stdexcept>
lub<ostream>
składniki płacą koszt przepływności w celu ich skompilowania.if constexpr
zastosowano w więcej miejscach w standardowej bibliotece w celu zwiększenia przepływności i zmniejszonego rozmiaru kodu w operacjach kopiowania, w permutacjach, takich jak odwrotne i obracane, 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 środowiska uruchomieniowego 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::thread
nie czeka już na uruchomienie wątku i nie wstawia już tak wielu warstw wywołań funkcji między bazową biblioteką_beginthreadex
C a dostarczonym obiektem wywołującym.std::thread
Wcześniej umieścić sześć funkcji między_beginthreadex
i dostarczonego obiektu wywoływanego. Ta liczba została zmniejszona do tylko trzech, z których dwie są tylkostd::invoke
. Ta zmiana usuwa również niejasną usterkę chronometrażu, w którejstd::thread
konstruktor przestanie odpowiadać, jeśli zegar systemowy zmienił się dokładnie w momencie utworzeniastd::thread
.Naprawiono regresję wydajności, która
std::hash
została wprowadzona podczas implementowaniastd::hash<std::filesystem::path>
programu .Biblioteka standardowa używa teraz destruktorów zamiast bloków catch w kilku miejscach, aby osiągnąć poprawność. Ta zmiana powoduje lepszą interakcję debugera: wyjątki, które są zgłaszane przez bibliotekę standardową w dotkniętych lokalizacjach, są teraz wyświetlane jako zgłaszane z oryginalnej witryny rzutu, a nie z naszej ponownej próby. 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
std::bitset
przez rzut warunkowy wewnątrznoexcept
funkcji zostało naprawione przez faktoring ścieżki zgłaszania.Rodzina
std::list
istd::unordered_*
używa iteratorów nie debugowania wewnętrznie w więcej miejsc.Kilka
std::list
elementów członkowskich zostało zmienionych w celu ponownego użycia węzłów listy, jeśli to możliwe, a nie cofnięcia przydziału i ponownego przydziału. Na przykład, biorąc pod uwagęlist<int>
, że ma już rozmiar 3, wywołanie doassign(4, 1729)
teraz zastępujeint
wartości w pierwszych trzech węzłach listy i przydziela jeden nowy węzeł listy z wartością 1729.Wszystkie standardowe wywołania biblioteki zostały
erase(begin(), end())
zmienione naclear()
.std::vector
teraz inicjuje i usuwa elementy wydajniej w niektórych przypadkach.Ulepszenia w
std::variant
celu zwiększenia przyjaznego optymalizatora, co powoduje lepsze generowanie kodu. Tworzenie kodu jest teraz znacznie lepsze za pomocą poleceniastd::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 udziału na żywo dla języka C++: udostępnianie i współpraca w czasie rzeczywistym
Funkcja IntelliSense szablonu
Pasek szablonu używa teraz interfejsu użytkownika okna Podgląd, a nie modalne okno, obsługuje szablony zagnieżdżone i wstępnie wypełnia wszystkie argumenty domyślne w oknie Podgląd. 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 szablonu 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ż przefiltrowane w środowisku wyszukiwania, które można filtrować.
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
Program Visual Studio 2019 zawiera następujące funkcje, które ułatwiają kodowanie i bardziej intuicyjne:
- Szybkie poprawki dla:
- Dodaj brakujące
#include
NULL
donullptr
- Dodawanie brakującego średnika
- 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 umieszczenie wskaźnika myszy na zamykającym nawiasie klamrowym
- Podgląd nagłówka/pliku kodu
- Przejdź do definicji, aby
#include
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 narzędzia CMake generowane przez narzędzia zewnętrzne, takie jak CMakeGUI, dostosowane systemy metakompilowania lub skrypty kompilacji, które wywołują cmake.exe siebie.
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 umożliwia jej 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 install
automatycznie 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śniejsza kompilacja i konfigurowanie komunikatów "begin" i "end" dla projektów CMake oraz obsługa interfejsu użytkownika postępu kompilacji programu Visual Studio. Ponadto istnieje teraz ustawienie szczegółowości narzędzia CMake w obszarze Opcje narzędzi>, aby dostosować poziom szczegółowości komunikatów kompilacji i konfiguracji narzędzia CMake w oknie danych wyjściowych.
Ustawienie
cmakeToolchain
jest 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 wszystko ctrl+Shift+B.
Integracja incrediBuild
IncrediBuild jest dołączany jako składnik opcjonalny w programowaniu aplikacji klasycznych z obciążeniem języka C++ . 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. Ta zmiana dotyczy szeregu awarii spowodowanych brakiem pamięci przez debuger. 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 klasycznych systemu Windows za pomocą języka C++
Te kreatory ATL/MFC języka C++ nie są już dostępne:
- Kreator składnikó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++ i /permissive-
/std:c++17
lub łańcuchem 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 współbieżnościCheck dla dobrze znanych standardowych typów bibliotek 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 sprawdzania profilu istnienia, która wykrywa zwisające wskaźniki i odwołania. Aby uzyskać więcej informacji, zobacz Okres istnienia aktualizacji profilu w programie Visual Studio 2019 (wersja zapoznawcza 2).
Więcej kontroli związanych z kohroutyną, w tym C26138, C26810, C26811 i reguła eksperymentalna 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#.