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 x64

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

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

  • Adres 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ązała problem ze zgodnością z elementami RtlCreateHeap i RtlAllocateHeap przechwytujących podczas tworzenia pul pamięci wykonywalnej.

    • Dodano obsługę starszych GlobalAlloc i LocalAlloc 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:llvmCL . Spowoduje to dodanie obsługi klauzuli lastprivate dotyczącej #pragma omp sekcji i niepodpisanych zmiennych indeksu w pętlach równoległych for . 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.

  • 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 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 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_refstd::midpoint funkcji , i istd::lerpstd::execution::unseq, optymalizacji dla std::reverse_copysystemu 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 narzędziu CMake Ustawienia.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.
  • Połączenie ion Manager 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.
  • Dostępna jest nowa kolekcja narzędzi o nazwie C++ Build Szczegółowe informacje. 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 jak push_back.

  • Dodaliśmy te funkcje biblioteki standardowej języka C++20 (dostępne w programie /std:c++latestlub /std:c++20 począwszy od programu Visual Studio 2019 w wersji 16.11):

    • P0487R1: naprawianieoperator>>(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
  • Nowe testy podstawowych wytycznych języka C++, w tym nowy zestaw reguł wyliczenia i dodatkowe constreguły typów , enumi .

  • 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 precyzji chars_format::fixed i chars_format::scientific (chars_format::general precision jest jedyną częścią, której jeszcze nie zaimplementowano)
    • Zoptymalizowano najkrótszy element 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() do konwersji wskaźnika na wskaźnik podstawowy
    • 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 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_withi dla basic_string i basic_string_viewends_with .
    • contains dla kontenerów asocjacyjnych.
    • 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++

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

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 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 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 Ustawienia 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

Analiza kodu

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 /Gmelementu , 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), /ZWi /Gm. W programie Visual Studio 2019 użyj trybów /std:c++17 lub /std:c++14 podczas kompilowania za pomocą /clrmetody , /ZWlub /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::functionstd::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:experimentalkompilatora . 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 /Ob3wiersza 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 -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:

    • 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 jak std::copy lub std::vector i std::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żywa std::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ą tylko std::invoke. Ta zmiana usuwa również niejasną usterkę chronometrażu, w której std::thread konstruktor przestanie odpowiadać, jeśli zegar systemowy zmienił się dokładnie w momencie utworzenia std::thread .

  • Naprawiono regresję wydajności, która std::hash została wprowadzona podczas implementowania std::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ątrz noexcept funkcji zostało naprawione przez faktoring ścieżki zgłaszania.

  • Rodzina std::list i std::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 do assign(4, 1729) teraz zastępuje int 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 na clear().

  • 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ą polecenia 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 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 do nullptr
    • Dodawanie brakującego średnika
    • Rozwiązywanie problemu z brakującą przestrzenią nazw lub zakresem
    • Zamień nieprawidłowe operandy pośrednie (* na & i & na *)
  • 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ą plik cmake.exe.

  • Ulepszona wydajność funkcji IntelliSense.

  • Nowy edytor ustawień stanowi alternatywę dla ręcznego edytowania pliku CMake Ustawienia.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 narzędziu CMake Ustawienia, takie jak niezgodne 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.

  • To cmakeToolchain ustawienie jest teraz obsługiwane w pliku CMake Ustawienia.json w celu określenia ł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++17lub łańcuchem 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#.