Co je nového pro C++ v Visual Studio 2022

Visual Studio 2022 přináší mnoho aktualizací a oprav prostředí Microsoft C++. Přidali jsme funkce a opravili jsme mnoho chyb a problémů v kompilátoru a nástrojích. Integrované Visual Studio také nabízí významná vylepšení výkonu a produktivity a nyní běží nativně jako 64bitová aplikace. Další informace o novinách v celé Visual Studio najdete v části Co je nového v Visual Studio 2022. Informace o novinách v dokumentech k C++ najdete v tématu Dokumentace k Jazyku Microsoft C++: Co je nového.

Co je nového pro C++ v Visual Studio verze 17.0

Souhrn nových funkcí a oprav chyb v Visual Studio najdete v tématu Co je nového v Visual Studio 2022 verze 17.0.

  • Rozhraní Visual Studio IDE devenv.exe je teď nativní 64bitová aplikace.

  • Výchozí MSVC sady nástrojů teď v záznamech ladění využívá algoritmus hash zdroje SHA-256. Dříve sada nástrojů ve výchozím nastavení používala MD5 pro hashování zdroje.

  • Nástroje sestavení v143 jsou teď dostupné prostřednictvím instalačního Visual Studio a v samostatných nástrojích sestavení.

Opětovné načítání za provozu pro nativní C++

V Visual Studio 2022 můžete při spuštění aplikace v ladicím programu použít tlačítko Opětovné načítání za provozu k úpravě aplikace, když je stále spuštěná. Toto prostředí využívá nativní funkce Upravit a pokračovat. Další informace o podporovaných úpravách najdete v tématu Edot and Continue (C++).

  • Opětovné načítání za provozu podporuje projekty CMake a Open Folder.

Podpora WSL2

  • Nyní můžete nativně sestavovat a ladit na WSL2 bez navazování připojení SSH. Podporují se projekty CMake pro více platforem i MSBuild linuxové projekty.

Vylepšená podpora CMake

  • Upgradovali jsme verzi CMake dodáovanou s Visual Studio na verzi 3.21. Další informace o tom, co je v této verzi k dispozici, najdete ve zprávě k vydání verze pro CMake 3.21.

  • Stránky s přehledem CMake byly aktualizovány tak, aby podporovaly CMakePresets.json .

  • Teď můžete konfigurovat a sestavovat projekty CMake pomocí CMake 3.21 a CMakePresets.json v3.

  • Visual Studio teď podporuje buildPresets.targets možnost v CMakePresets.json . Tato možnost umožňuje vytvořit podmnožinu cílů v projektu CMake.

  • Nabídka Project v projektech CMake byla zjednodušená a zpřístupňuje možnosti pro odstranění mezipaměti a překonfigurování a zobrazení mezipaměti.

  • Implementovali jsme možnost kompilátoru pro zobrazení seznamu závislostí modulu /scanDependencies C++20 pro projekty CMake, jak je popsáno v /scanDependencies. Jedná se o krok na cestě k podpoře vytváření projektů založených na modulech pomocí CMake a pracujeme na dokončení této podpory v pozdějších verzích.

Vylepšení standardní knihovny

Vylepšení standardní knihovny (STL) jsou zvýrazněná tady. Úplný seznam nových funkcí, změn, oprav chyb a vylepšení výkonu najdete v protokolu změn týmu STL.

  • Přidání vizualizérů ladění pro zlepšení způsobu zobrazení následujících typů: source_location , , (a jeho iterátory), , , , ( a jeho iterátor/sentinel), bind_front() , u8string , default_sentinel_tunreachable_sentinel_tranges::empty_viewranges::single_viewranges::iota_viewranges::ref_viewthreadthread::idjthread , a filesystem::path
  • Přidáno do skupiny funkcí v a do různých funkcí v , jako jsou členské [[nodiscard]]stoi()<string><locale>collatehas_facet() funkce, a isalnum() rodiny a tolower() .
  • P0980R1 Made constexpr in VS 2019 16.10. Nyní je podporován také pro jazyk Clang.
  • P1004R2 Made constexpr in VS 2019 16.10. Nyní je podporován také pro jazyk Clang.

Zvýrazněné funkce C++23

  • P1048R1 Byla přidána nová vlastnost pro standardní knihovnu jazyka C++, která zjišťuje, zda je typ vymezený výčet.
  • P1132R7,inout_ptr()
  • P1679R3 Pro basic_string abasic_string_view
  • P1682R3 pro výčty
  • P2162R2 Povolit dědění z
  • P2166R1 Zakazuje vytváření basic_string_view a z nullptr . Jedná se o změnu, která má narušovat zdroj. Kód, který dříve měl nedefinované chování za běhu, bude nyní odmítnut s chybami kompilátoru.
  • P2186R2 Byla odebrána podpora uvolňování paměti. Tím se declare_reachable odebere , , , , undeclare_reachabledeclare_no_pointersundeclare_no_pointersget_pointer_safety . Dříve tyto funkce nemají žádný vliv.

Zvýrazněná vylepšení výkonu

  • <format> teď rozpozná, kdy zapisuje do objektu pro nebo , a zrychlí volání metody na hodnotu back_insert_iteratorbasic_stringvectorinsert()end() kontejneru.
  • Vylepšili std::find() jsme výkon a pro std::count()vector<bool> 19x a 26x (krát, ne procenta).
  • Vylepšený výkon std::count() pro vector<bool>
  • std::byteteď má stejný výkon jako v unsigned char a . reverse()variant::swap()

Podpora Clang a LLVM

  • Nástroje LLVM dodávané s Visual Studio byly upgradovány na LLVM 12. Další informace najdete ve zprávě k vydání verze LLVM.

  • Podpora Clang-cl se aktualizovala na LLVM 12.

  • Teď můžete ladit procesy spuštěné ve vzdáleném systému z Visual Studio pomocí LLDB.

C++ AMP zastaralé

  • C++ AMP záhlaví jsou teď zastaralá. Zahrnutí <amp.h> do projektu C++ generuje chyby sestavení. Pokud chcete chyby uchovat, definujte _SILENCE_AMP_DEPRECATION_WARNINGS . Další informace najdete na našich odkazech na vyněcování AMP.

Vylepšení IntelliSense

  • Vylepšují jsme IntelliSense jazyka C++ při poskytování zvýraznění navigace a syntaxe pro typy z importovaných modulů a jednotek hlaviček. IntelliSense je pro nás aktivní oblastí investic. Pomozte nám s vylepšením: Podělte se o svůj názor na web Developer Community s využitím možnosti Poslatnázor.

  • Vylepšili jsme výkon C++ IntelliSense optimalizací využití hlaviček v mezipaměti a přístupu k databázi symbolů, která poskytuje vylepšené časy načítání pro přístup k vašemu kódu.

  • Linter kódu IntelliSense pro C++ je teď ve výchozím nastavení aktivní a poskytuje okamžité návrhy při psaní a opravuje návrhy na běžné chyby kódu.

  • Technologie IntelliSense jazyka C++ pro projekty CMake teď funguje při použití přednastavené hodnoty se zobrazovaným názvem.

Aktualizace úloh C++

  • Aktualizace na NDK r21 LTS v úlohu Vývoje mobilních aplikací v C++.

  • Úloha Vývoj her pomocí C++ teď nainstaluje nejnovější Unreal Engine s podporou pro Visual Studio 2022.

Vylepšení analýzy kódu

  • Analýza kódu teď vynucuje, aby byly vráceny hodnoty funkcí s poznámkami _Check_return_ nebo _Must_inspect_result_ musí být zkontrolovány.

  • Vylepšili jsme detekci přesouvání ukazatele null v našich nástroji pro analýzu kódu.

  • Přidání podpory pro gsl::not_null do analýzy kódu

  • Podpora libfuzzeru v možnosti /fsanitize=fuzzer kompilátoru

Poznámky k verzi pro starší verze

K dispozici jsou také poznámky k verzi pro starší verze C++. Informace o novinek v jazyce C++ v Visual Studio 2019 najdete v tématu Co je nového pro C++ v Visual Studio 2019. Informace o novinek v jazyce C++ v Visual Studio 2017 najdete v tématu Co je nového pro C++ v Visual Studio 2017. Informace o novinek v předchozích verzích najdete v Visual C++ 2003 až 2015.

Známé problémy

C++ IntelliSense

  • Při importu modulu nebo hlavičkové jednotky C++20může technologie IntelliSense přestat fungovat nebo se zobrazí chyba "Došlo k příliš mnoha chybám".

Další informace o dalších otevřených problémech a dostupných alternativních řešeních pro C++ v Visual Studio 2022 najdete v seznamu problémů s vývojáři Community C++.

Zpětná vazba a návrhy

Rádi uslyšíme váš názor! Problém můžete nahlásit nebo navrhnout funkci pomocí ikony Odeslat názor v pravém horním rohu instalačního programu nebo integrovaného vývojového prostředí Visual Studio nebo v části Nápověda odeslatnázor. Problémy můžete sledovat pomocí nástroje Visual Studio Developer Community, kde můžete přidávat komentáře nebo hledat řešení. Naše podpora na živém chatu vám navíc poskytne bezplatnou pomoc s instalací.

Blogy

Využijte přehledy a doporučení dostupné na webu Microsoft Developer Blogy. Budou vás udržovat aktuální ve všech nových verzích. Blogy obsahují příspěvky s širokým rozsahem funkcí. Najdete zde blog týmu C++a blog Visual Studio který vás zajímá.