Co nowego w języku C++ w Visual Studio 2022 r.

Visual Studio 2022 r. oferuje wiele aktualizacji i poprawek środowiska Microsoft C++. Dodaliśmy funkcje i rozwiązaliśmy wiele usterek i problemów w kompilatorze i narzędziach. Środowisko IDE Visual Studio oferuje również znaczne ulepszenia wydajności i produktywności, a teraz działa natywnie jako aplikacja 64-bitowa. Aby uzyskać więcej informacji na temat nowości we wszystkich Visual Studio, odwiedź stronę Co nowego w Visual Studio 2022 roku. Aby uzyskać informacje o nowościach w dokumentacji języka C++, zobacz Dokumentację języka Microsoft C++: Co nowego.

Co nowego w języku C++ w Visual Studio w wersji 17.2

Aby zapoznać się z podsumowaniem nowych funkcji i poprawek błędów w Visual Studio, zobacz Co nowego w Visual Studio 2022 w wersji 17.2.

  • Dodano obsługę kompilatora dla funkcji deducing thisjęzyka C++23 dostępnej w ramach /std:c++latest opcji .

  • Dodano obsługę IntelliSense funkcji deducingu this języka C++23 i if consteval.

  • Dodano nazwę parametru wbudowanego i obsługę wskazówek typów, przełączane przez naciśnięcie klawiszy Alt+F1 lub dwukrotne naciśnięcie klawiszy Ctrl. To zachowanie można dostosować w obszarze Narzędzia > Opcje > Edytory > tekstów C/C++ > IntelliSense.

  • Dodano obsługę eksperymentalną modułów języka C++20 w projektach CMake. Ta obsługa jest obecnie dostępna tylko w przypadku generatora Visual Studio (MSBuild).

  • W wersji 17.1 wprowadziliśmy widoki rejestrowania urządzeń peryferyjnych i RTOS dla deweloperów osadzonych. Nadal ulepszamy możliwości tych widoków dzięki ulepszeniom użyteczności w wersji 17.2:

    • Okno narzędzia RTOS jest teraz domyślnie ukryte. Zapobiega to wyświetlaniu okna narzędzia z komunikatami o błędach, które nie są istotne, gdy nie używasz systemu RTOS.
    • Po dwukrotnym kliknięciu obiektu RTOS w oknie narzędzia dodaje on zegarek dla obiektu.
    • Po wybraniu wartości początkowych i końcowych wskaźnika stosu w oknie narzędzia RTOS zostanie otwarta w oknie pamięci.
    • Dodaliśmy świadomość wątków dla elementów docelowych urządzeń w oknie stosu wywołań.
    • Użytkownicy mogą teraz wybrać ikonę pinezki obok urządzeń peryferyjnych, rejestrów lub pól, aby przypiąć je w górnej części widoku peryferyjnego.
  • Dodaliśmy implementacje pozostałych raportów o wadach języka C++20 ( nazywanych również backportami). Wszystkie funkcje języka C++20 są teraz dostępne w /std:c++20 ramach opcji. Aby uzyskać więcej informacji na temat wdrożonych backportów, zobacz projekt C++20 Defect Reports w repozytorium Microsoft/STL GitHub oraz wpis w blogu STL Completes /std:c++20MSVC.

  • Dodaliśmy różne funkcje biblioteki C++23 dostępne w ramach /std:c++latest tej opcji. Aby uzyskać więcej informacji na temat nowych funkcji, zobacz dziennik zmian repozytorium STL.

  • Zwiększona wydajność początkowego indeksowania języka C++ przez maksymalnie 20%, w zależności od głębokości wykresu dołączania.

Co nowego w języku C++ w Visual Studio w wersji 17.1

Aby zapoznać się z podsumowaniem nowych funkcji i poprawek błędów w Visual Studio, zobacz Co nowego w Visual Studio 2022 w wersji 17.1.

  • Dodano nowy szablon Konfigurowanie ustawień wstępnych do konfigurowania i kompilowania projektów CMake w zdalnym systemie macOS za pomocą polecenia CMakePresets.json. Można również uruchomić obiekty docelowe narzędzia CMake w zdalnym systemie macOS, a następnie debugować zdalnie w debugerze Visual Studio wspieranym przez GDB lub LLDB.

  • Teraz można debugować podstawowe zrzuty w zdalnym systemie macOS z Visual Studio przy użyciu usługi LLDB lub GDB.

  • Wersje i ClangLLVM dostarczane z Visual Studio zostały uaktualnione do wersji 13.

  • integracja narzędzia CMake Visual Studio jest aktywna tylko wtedy, gdy CMakeLists.txt element jest identyfikowany w katalogu głównym otwartego obszaru roboczego. Jeśli element CMakeLists.txt zostanie zidentyfikowany na innym poziomie obszaru roboczego, zostanie wyświetlony monit o aktywowanie integracji narzędzia CMake Visual Studio z powiadomieniem.

  • Dodano nowe okno wizualizacji rejestrowania dla osadzonych obiektów docelowych, dostępne za pośrednictwem debugowania>Windows>Embedded Registers.

  • Dodano nowy widok wątku dla projektów RTOS, dostępny za pośrednictwem funkcji Debug>Windows>RTOS Objects.

Co nowego w języku C++ w Visual Studio w wersji 17.0

Aby zapoznać się z podsumowaniem nowych funkcji i poprawek usterek w Visual Studio, zobacz Co nowego w Visual Studio 2022 w wersji 17.0.

  • Środowisko IDE Visual Studio jest devenv.exeteraz natywną aplikacją 64-bitową.

  • Zestaw narzędzi MSVC teraz domyślnie określa skrót sha-256 źródła w rekordach debugowania. Wcześniej zestaw narzędzi domyślnie używał funkcji MD5 do tworzenia skrótów źródłowych.

  • Narzędzia kompilacji w wersji 143 są teraz dostępne za pośrednictwem instalatora Visual Studio i w autonomicznych narzędziach kompilacji.

Przeładowywanie na gorąco dla natywnego języka C++

W Visual Studio 2022 r. po uruchomieniu aplikacji w debugerze możesz użyć przycisku Przeładowywanie na gorąco, aby zmodyfikować aplikację podczas jej działania. To środowisko jest obsługiwane przez natywną edycję i kontynuuj. Aby uzyskać więcej informacji na temat obsługiwanych edycji, zobacz Edytowanie i kontynuowanie (C++).

  • Przeładowywanie na gorąco obsługuje projekty CMake i Open Folder.

Obsługa protokołu WSL2

  • Teraz możesz kompilować i debugować natywnie w programie WSL2 bez nawiązywania połączenia SSH. Obsługiwane są zarówno międzyplatformowe projekty CMake, jak i projekty systemu Linux oparte na MSBuild.

Ulepszona obsługa narzędzia CMake

  • Uaktualniliśmy wersję narzędzia CMake dostarczoną z Visual Studio do wersji 3.21. Aby uzyskać więcej informacji na temat dostępnych w tej wersji, zobacz informacje o wersji narzędzia CMake 3.21.

  • Strony przeglądu narzędzia CMake zostały zaktualizowane w celu obsługi CMakePresets.jsonprogramu .

  • Teraz można skonfigurować i skompilować projekty CMake przy użyciu narzędzia CMake 3.21 i CMakePresets.json wersji 3.

  • Visual Studio obsługuje teraz buildPresets.targets opcję w pliku CMakePresets.json. Ta opcja umożliwia utworzenie podzestawu obiektów docelowych w projekcie CMake.

  • Menu Project w projektach CMake zostało usprawnione i uwidacznia opcje "Usuń pamięć podręczną i ponownie skonfiguruj" i "Wyświetl pamięć podręczną".

  • Zaimplementowano opcję kompilatora, /scanDependencies aby wyświetlić listę zależności modułów C++20 dla projektów CMake, zgodnie z opisem w artykule P1689R4. Jest to krok w kierunku obsługi tworzenia projektów opartych na modułach za pomocą narzędzia CMake i pracujemy nad ukończeniem tej obsługi w kolejnych wersjach.

Ulepszenia standardowej biblioteki

Wybierz pozycję Ulepszenia biblioteki standardowej (STL) wyróżnione tutaj. Aby uzyskać kompleksową listę nowych funkcji, zmian, poprawek błędów i ulepszeń wydajności, zobacz dziennik zmian zespołu STL.

  • Dodano wizualizatory debugowania w celu ulepszenia wyświetlania następujących typów: source_location, u8stringbind_front(), (i jego iteratorów), default_sentinel_t, ranges::single_viewranges::empty_viewranges::iota_viewunreachable_sentinel_t(i iteratora/sentinel), threadranges::ref_viewthread::id, , , i jthreadfilesystem::path
  • Dodano [[nodiscard]] do stoi() rodziny funkcji w <string> systemach i do różnych funkcji, <locale> takich jak collate funkcje członkowskie, has_facet()oraz rodziny i isalnum() .tolower()
  • P0980R1 Wykonane std::stringconstexpr w programie VS 2019 16.10. Teraz jest ona również obsługiwana w języku Clang.
  • P1004R2 Wykonane std::vectorconstexprw programie VS 2019 16.10. Teraz jest ona również obsługiwana w języku Clang.

Wyróżnione funkcje języka C++23

  • P1048R1 Dodano is_scoped_enumnową cechę biblioteki standardowej języka C++, która wykrywa, czy typ jest wyliczeniem o określonym zakresie.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains() Dla basic_string i basic_string_view
  • P1682R3to_underlying() wyliczenia
  • P2162R2 Zezwalaj na dziedziczenie z std::variant
  • P2166R1 Zakazać konstruowania i basic_string_view z nullptr.basic_string Ta zmiana jest zmianą powodującą niezgodność źródła. Kod, który wcześniej miał niezdefiniowane zachowanie w czasie wykonywania, jest teraz odrzucany z błędami kompilatora.
  • P2186R2 Usunięto obsługę odzyskiwania pamięci. Ta zmiana powoduje usunięcie declare_reachable, , undeclare_reachable, declare_no_pointers, get_pointer_safetyundeclare_no_pointers. Wcześniej te funkcje nie miały wpływu.

Wyróżnione ulepszenia wydajności

  • <format> teraz wykrywa, kiedy zapisuje obiekt back_insert_iterator dla elementu basic_string lub vector, i sprawia, że szybsze wywołanie insert()end() kontenera.
  • Poprawiliśmy wydajność std::find() i std::count() dla vector<bool> 19x i 26x (razy, a nie procent).
  • Poprawiliśmy wydajność dla std::count()vector<bool>
  • std::byte teraz ma taką samą wydajność jak unsigned char w systemie reverse() i variant::swap()

Obsługa oprogramowania Clang i LLVM

  • Narzędzia LLVM dostarczane z Visual Studio zostały uaktualnione do maszyny WIRTUALNEJ LLVM 12. Aby uzyskać więcej informacji, zobacz informacje o wersji maszyny wirtualnej LLVM.

  • Obsługa języka Clang-cl została zaktualizowana do maszyny WIRTUALNEJ LLVM 12.

  • Teraz można debugować procesy uruchomione w systemie zdalnym z Visual Studio przy użyciu usługi LLDB.

C++ AMP przestarzałe

  • nagłówki C++ AMP są teraz przestarzałe. Uwzględnianie <amp.h> w projekcie języka C++ generuje błędy kompilacji. Aby uciszyć błędy, zdefiniuj _SILENCE_AMP_DEPRECATION_WARNINGSwartość . Aby uzyskać więcej informacji, zobacz nasze linki amp deprecation.

ulepszenia IntelliSense

  • Wprowadziliśmy ulepszenia w języku C++ IntelliSense podczas zapewniania wyróżniania nawigacji i składni dla typów z zaimportowanych modułów i jednostek nagłówków. IntelliSense jest dla nas aktywnym obszarem inwestycji. Pomóż nam ulepszyć: Podziel się swoją opinią na temat Developer Community, korzystając z pomocy>wyślij opinię.

  • Ulepszyliśmy wydajność IntelliSense języka C++, optymalizując użycie buforowanego nagłówka i dostęp do bazy danych symboli, zapewniając lepsze czasy ładowania w celu uzyskania kodu.

  • Kod lintera IntelliSense dla języka C++ jest domyślnie włączony, zapewniając błyskawiczne sugestie podczas wpisywania i naprawianie sugestii dotyczących typowych wad kodu.

  • IntelliSense języka C++ dla projektów CMake działa teraz w przypadku używania ustawień wstępnych z nazwą wyświetlaną.

Aktualizacje obciążeń języka C++

  • Zaktualizowano do wersji NDK r21 LTS w obciążeniu Programowanie mobilne języka C++ .

  • Programowanie gier w języku C++ instaluje teraz najnowszy aparat Unreal Engine z obsługą programu Visual Studio 2022.

Ulepszenia analizy kodu

  • Analiza kodu wymusza teraz, aby zwracały wartości funkcji z adnotacjami _Check_return_ lub _Must_inspect_result_ muszą być sprawdzane.

  • Ulepszyliśmy wykrywanie dereferencji wskaźnika null w narzędziu do analizy kodu.

  • Dodano obsługę gsl::not_null analizy kodu.

  • Obsługa biblioteki Libfuzzer w ramach opcji kompilatora /fsanitize=fuzzer .

Informacje o wersji dla starszych wersji

Dostępne są również informacje o wersji starszych wersji języka C++. Aby uzyskać informacje o nowościach dla języka C++ w Visual Studio 2019 r., zobacz Co nowego dla języka C++ w Visual Studio 2019 r. Aby uzyskać informacje o nowościach dla języka C++ w Visual Studio 2017, zobacz Co nowego dla języka C++ w Visual Studio 2017. Aby uzyskać informacje o nowościach we wcześniejszych wersjach, zobacz Visual C++ What's New 2003 to 2015 (Co nowego w wersji 2003–2015).

Znane problemy

IntelliSense języka C++

Aby uzyskać więcej informacji na temat innych otwartych problemów i dostępnych obejść dla języka C++ w Visual Studio 2022 r., zobacz listę problemów z Developer Community języka C++.

Opinie i sugestie

Chętnie pomożemy! Możesz zgłosić problem lub zasugerować funkcję przy użyciu ikony Wyślij opinię w prawym górnym rogu instalatora lub środowiska IDE Visual Studio albo z obszaruWyślij opinięw pomocy>. Problemy można śledzić przy użyciu Visual Studio Developer Community, gdzie dodasz komentarze lub znajdziesz rozwiązania. Możesz też uzyskać bezpłatną pomoc dotyczącą instalacji za pośrednictwem naszej pomocy technicznej przez czat na żywo.

Blogi

Skorzystaj ze szczegółowych informacji i zaleceń dostępnych w witrynie blogów dla deweloperów firmy Microsoft . Zapewnią one aktualność wszystkich nowych wersji. Blogi obejmują szczegółowe wpisy na temat szerokiej gamy funkcji. Znajdziesz blog zespołu języka C++ i blog Visual Studio o szczególnym znaczeniu.