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).

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 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:llvm jest teraz dostępny na x86 i ARM64, oprócz wersji x64

  • Katalogi 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.

  • Dodano obsługę CMakePresets.

  • 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).

  • Address Sanitizer:

    • 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ązano problem ze zgodnością z interceptorami RtlCreateHeap i RtlAllocateHeap podczas tworzenia pul pamięci wykonywalnej.

    • Dodano obsługę starszych GlobalAlloc i LocalAlloc rodzinnych funkcji pamięci. Te przechwytywacze można włączyć, ustawiając flagę środowiska ASAN_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:llvm CL. Spowoduje to dodanie obsługi klauzuli lastprivate w sekcji #pragma omp oraz nieznakowych zmiennych indeksu w for pętlach równoległych. 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 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.

  • Oznaczono wiele typów blokady/ochrony w STL jako nodiscard.

  • IntelliSense:

  • 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 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 jak constexprstd::vector i std::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 i std::lerp, optymalizacje dla std::execution::unseq oraz 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:FULL wydajność 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.

  • .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 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-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 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++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 > C/C++ Język przy użyciu właściwości C++ Language Standard.
  • 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::vector odfiltrowuje metody, takie jak push_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: naprawianieoperator>>(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
  • 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 precyzji chars_format::fixed i chars_format::scientific (chars_format::general precision jest jedyną częścią, której jeszcze nie zaimplementowano)
    • Zoptymalizowano najkrótszy chars_format::fixed
  • 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):
      • P0020R6: atomic<floating-point>
      • P0463R1: wyliczenie endian
      • P0482R6: typ char8_t dla ciągów i znaków UTF-8
      • P0653R2: to_address() w celu konwersji wskaźnika na surowy wskaźnik
    • 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
    • Dostępne bezwarunkowo:
      • P0754R2: nagłówek <version>
      • P0771R1: konstruktor przenoszenia std::function powinien mieć wartość noexcept
  • 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 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++20 lub /std:c++latest. W /std:c++17 trybie językowym i w trybie domyślnym (/std:c++14 ) nowy analizator (parser) można włączyć przy użyciu /Zc:lambda w Visual Studio 2019 w wersji 16.9 lub nowszej (wcześniej dostępnej jako /experimental:newLambdaProcessor począ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_with i ends_with dla basic_string i basic_string_view.
    • contains dla kontenerów powiązanych.
    • remove, remove_if i unique dla obiektów list i forward_list zwracają teraz obiekt size_type.
    • shift_left i shift_right dodane 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

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 #include dyrektyw, które vcpkg może zainstalować, oraz automatyczne uzupełnianie dostępnych pakietów dla dyrektywy CMake find_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

Code Analysis

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++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 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++latest jest teraz niezgodny z /clr (wszystkie wersje), /ZW i /Gm. W programie Visual Studio 2019 użyj trybów /std:c++17 lub /std:c++14 podczas kompilowania za pomocą /clr, /ZW lub /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::function i std::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 /Ob2 domyślnie. Jeśli okaże się, że kompilator nie wprowadza kodu wystarczająco agresywnie, 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:

    • 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 konstrukcje std::copy lub std::vector, i std::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 #include dyrektyw dla nagłówków, które były wcześniej uwzględnione w sposób pośredni. Na przykład kod, który używa std::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 constexpr zastosowano 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::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 a dostarczonym obiektem wywoływanym. Liczba ta została zmniejszona do trzech, z których dwie to tylko std::invoke. Ta zmiana usuwa również niejasny problem z synchronizacją, gdzie std::thread konstruktor przestawał odpowiadać, jeśli zegar systemowy zmienił się dokładnie w momencie utworzenia std::thread.

  • Naprawiono regresję wydajności w std::hash, którą wprowadziliśmy podczas implementowania std::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 noexcept zostało naprawione poprzez wydzielenie ścieżki zgłaszającej.

  • Rodzina std::list i std::unordered_* używa niedebugujących iteratorów wewnętrznie w wielu miejscach.

  • Kilka std::list elementó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łanie assign(4, 1729) teraz zastępuje wartości int w 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 na clear().

  • std::vector teraz inicjuje i usuwa elementy wydajniej w niektórych przypadkach.

  • Ulepszenia w std::variant w celu zwiększenia zgodności z optymalizatorem, co skutkuje lepszym generowaniem kodu. Inlining kodu jest teraz znacznie lepsze z użyciem std::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
    • NULL do nullptr
    • Dodaj brakujący średnik
    • Rozwiązywanie problemu z brakującą przestrzenią nazw lub zakresem
    • Zamień nieprawidłowe operandy pośrednie (* na & i & na *)
  • 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 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ś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 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 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

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#.