Sdílet prostřednictvím


Co je nového v jazyce C++ v sadě Visual Studio 2019

Visual Studio 2019 přináší mnoho aktualizací a oprav prostředí Microsoft C++. Opravili jsme mnoho chyb a problémů v kompilátoru a nástrojích. Mnoho z těchto problémů odeslali zákazníci prostřednictvím možnosti Nahlásit problém a v části Odeslat zpětnou vazbu zadejte možnosti návrhu. Děkujeme vám, že hlásíte chyby!

Další informace o novinkách ve všech sadě Visual Studio najdete v tématu Co je nového v sadě Visual Studio 2019. Informace o novinkách jazyka C++ v sadě Visual Studio 2017 najdete v tématu Co je nového pro C++ v sadě Visual Studio 2017. Informace o novinkách jazyka C++ v sadě Visual Studio 2015 a starších verzích najdete v tématu Visual C++ What's New 2003 až 2015. Další informace najdete v dokumentaci Microsoft C++: Co je nového.

Novinky pro C++ v sadě Visual Studio verze 16.11

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.11 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.11.

  • Kompilátor teď podporuje režim kompilátoru /std:c++20 . Dříve byly funkce C++20 dostupné jenom v /std:c++latest režimu v sadě Visual Studio 2019. Funkce, které původně vyžadovaly /std:c++latest režim, teď fungují v /std:c++20 režimu nebo novějších v nejnovějších verzích sady Visual Studio.

  • Nástroje LLVM dodávané se sadou Visual Studio byly upgradovány na LLVM 12. Podrobnosti najdete v poznámkách k verzi virtuálního počítače LLVM.

  • Podpora Clang-cl byla aktualizována na LLVM 12.

Novinky pro C++ v sadě Visual Studio verze 16.10

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.10 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.10.

  • Všechny funkce C++20 jsou nyní k dispozici v části /std:c++latest. I když je implementace standardů C++20 jazyka C++20 (jak je aktuálně publikováno iso), očekává se, že některé klíčové funkce knihovny C++20 budou změněny nadcházejícími opravami chyb Defect Reports (opravy chyb ISO C++20), které je můžou změnit nekompatibilním způsobem ABI. Další podrobnosti najdete v tématu Problém s Microsoftem nebo STL č. 1814 .

    • Podpora okamžitého fungování C++20 a constinit přidaná ve verzi 16.10
    • Poslední části <chrono>: nové hodiny, přestupné sekundy, časová pásma a analýza
    • <format> Implementace formátování textu
  • /openmp:llvm je teď kromě x64 k dispozici i na platformě x86 a ARM64.

  • Adresáře zahrnutí je teď možné určit jako externí s přizpůsobenými úrovněmi upozornění kompilace a nastavením analýzy kódu.

  • Přidali jsme /await:strict možnost povolit koruty ve stylu C++20 v dřívějších režimech jazyka.

  • Vizualizace std::coroutine_handle<T> ladicího programu teď zobrazuje původní název a podpis korutinové funkce a aktuální bod pozastavení.

  • Přidání podpory pro CMakePresets

  • Při přidávání nového vzdáleného připojení v sadě Visual Studio teď musíte přijmout nebo odepřít otisk klíče hostitele, který server prezentuje.

  • /external Přidání přepínače do MSVC pro zadání hlaviček, které by se měly považovat za externí pro účely upozornění.

Novinky pro C++ v sadě Visual Studio verze 16.9

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.9 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.9.

  • Adresa Sanitizer:

    • Podpora sanitizátoru adres ve Windows je mimo experimentální režim a dosáhla obecné dostupnosti.

    • Rozšířená RtlAllocateHeap podpora, opravili jsme problém s RtlCreateHeap kompatibilitou a RtlAllocateHeap průsečíky při vytváření spustitelných fondů paměti.

    • Byla přidána podpora pro starší verze GlobalAlloc a LocalAlloc řadu funkcí paměti. Tyto průsečíky můžete povolit nastavením příznaku ASAN_OPTIONS=windows_hook_legacy_allocators=trueprostředí .

    • Byly aktualizovány chybové zprávy pro prokládání stínové paměti a selhání zachytávání, aby byly problémy a řešení explicitní.

    • Integrace integrovaného vývojového prostředí (IDE) teď dokáže zpracovat celou kolekci výjimek, které může ASan hlásit.

    • Kompilátor a linker budou navrhovat generování informací o ladění, pokud zjistí, že vytváříte pomocí ASan, ale nevysílají ladicí informace.

  • Nyní můžete cílit na verzi LLVM modulu runtime OpenMP pomocí nového přepínače /openmp:llvmCL . Tím se přidá podpora klauzule pro lastprivate #pragma omp oddíly a proměnné indexu bez znaménka v paralelních for smyčkách. Přepínač /openmp:llvm je aktuálně dostupný pouze pro cíl amd64 a je stále experimentální.

  • Projekty CMake sady Visual Studio teď mají prvotřídní podporu pro vzdálený vývoj pro Windows. To zahrnuje konfiguraci projektu CMake pro cílení na Windows ARM64, nasazení projektu na vzdálený počítač s Windows a ladění projektu na vzdáleném počítači s Windows ze sady Visual Studio.

  • Verze systému Ninja dodávaná se sadou Visual Studio ve Windows byla aktualizována na verzi 1.10. Další informace o tom, co je součástí, najdete ve zprávě k vydání verze Ninja 1.10.

  • Verze nástroje CMake dodávaná se sadou Visual Studio byla aktualizována na verzi 3.19. Další informace o tom, co je součástí, najdete v poznámkách k verzi CMake 3.19.

  • V hodnotě STL je označeno mnoho typů zámků a ochranných krytů jako nodiscard.

  • IntelliSense:

  • MSVC nyní určuje správné moduly runtime sanitizéru adres, které jsou nutné pro binární soubory. Váš projekt sady Visual Studio se na nové změny adaptuje automaticky. Při použití sanitizátoru adresy na příkazovém řádku teď stačí předat /fsanitize=address kompilátoru.

  • Správce připojení sady Visual Studio nyní podporuje privátní klíče, které využívají algoritmus veřejného klíče ECDSA.

  • Verze pro LLVM a Clang byly v našem instalačním programu aktualizovány na v11. Přečtěte si poznámky k verzi pro LLVM a Clang, kde najdete další informace.

  • Visual Studio bude odteď pro konfiguraci IntelliSense používat proměnné CMake ze souborů sady nástrojů. Díky tomu získáte lepší prostředí pro integrovaný vývoj a vývoj pro Android.

  • Implementace návrhu More Constexpr Containers, který umožňuje destruktory a nové výrazy být constexpr. Tím se zpevňuje cesta pro nástroje jako constexpr std::vector a std::string.

  • Rozšířená podpora pro moduly C++ 20 IntelliSense, včetně možnosti Přejít na definici, Přejít na modul a dokončování členů.

  • Zkrácené šablony funkcí jsou nyní podporovány v kompilátoru MSVC.

Novinky pro C++ v sadě Visual Studio verze 16.8

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.8 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.8.

  • Coroutiny C++20 se teď podporují v sadě /std:c++latest Visual Studio 2019 verze 16.11 nebo /std:c++20 <coroutine> v záhlaví.

  • IntelliSense teď poskytuje podporu pro C++20 hlavičky <concepts> a <ranges> a umožňuje přejmenování a procházení pro definice konceptu.

  • Naše STL teď podporuje většinu rozsahů C++20.

  • Podmíněně triviální speciální členské funkce jsou teď podporovány v MSVC.

  • C11 a C17 jsou nyní podporovány v rámci /std:c11 přepínačů a /std:c17 přepínačů.

  • Mezi další vylepšení STL patří úplná podpora pro std::atomic_refstd::midpoint std::lerp std::execution::unseqoptimalizace a optimalizace pro std::reverse_copya další.

  • Upgradovali jsme verzi CMake dodávanou se sadou Visual Studio na CMake 3.18.

  • Naše nástroje pro analýzu kódu teď podporují standard SARIF 2.1, standardní formát protokolu statické analýzy.

  • Chybějící nástroje sestavení v projektech pro Linux teď zobrazí upozornění na panelu nástrojů a srozumitelný popis chybějících nástrojů v seznamu chyb.

  • Teď můžete ladit výpisy paměti Linuxu na vzdáleném systému Linux nebo WSL přímo ze sady Visual Studio.

  • Pro generování komentářů C++ Doxygen jsme přidali další možnosti stylu komentáře (/*! a //!).

  • Další oznámení vcpkg.

  • Podpora kompilátoru pro lambda v nehodnocených kontextech

  • /DEBUG:FULL zvýšení výkonu propojení vytvořením souboru PDB s více vlákny U několika velkých aplikací a her AAA dochází k dvakrát až čtyřikrát rychlejšímu propojování.

  • Ladicí program sady Visual Studio teď podporuje char8_t.

  • Podpora projektů ARM64 pomocí clang-cl

  • Podpora vnitřních funkcí Intel AMX

Novinky pro C++ v sadě Visual Studio verze 16.7

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.7 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.7.

  • Naše vzdálená podpora C++ nyní zahrnuje širší řadu linuxových distribucí a prostředí, včetně sh, csh, bash, tsch, ksh, zsh a dash. Volbu prostředí pro vzdálené připojení můžete změnit tak, že upravíte novou vlastnost shell v souboru ConnectionManager.exe. Tato podpora byla testována na linuxových projektech založených na MSBuildu i na projektech CMake, které cílí na vzdálený linuxový systém nebo WSL.

  • Nově můžete pomocí systému Ninja – systému sestavení, který velmi rychle vyhodnocuje přírůstková sestavení – vylepšit dobu přírůstkových sestavení u linuxových projektů založených na MSBuildu. Tuto funkci můžete povolit na stránce s obecnými vlastnostmi tak, že nastavíte Povolit přírůstkové sestavení na možnost Pomocí systému Ninja. Na vzdáleném linuxovém systému nebo WSL musíte mít nainstalovaný systém Ninja (ninja-build).

  • Implementovali jsme nové funkce standardní knihovny C++20. Podrobný seznam najdete v protokolu změn funkce STL na GitHubu.

  • Teď můžete upravit a nastavit výchozí vzdálená připojení SSH ve Správci připojení. To znamená, že můžete upravit stávající vzdálené připojení (například pokud se změnila jeho IP adresa) a nastavit výchozí připojení, která se mají používat v CMakeSettings.json a launch.vs.json. Vzdálená připojení SSH umožňují vytvářet a ladit projekty C++ na vzdáleném systému Linux přímo ze sady Visual Studio.

  • Vylepšená podpora technologie IntelliSense pro Clang ve Windows (clang-cl) v sadě Visual Studio. Cesta zahrnutí clang teď zahrnuje knihovny clang, vylepšili jsme zobrazení vlnovek v editoru při použití standardní knihovny a přidali jsme podporu C++2a v režimu clang.

  • V projektech jazyka C++ teď můžete vyzkoušet podtržení chyb v kódu a zobrazit více navrhovaných rychlých oprav. Tuto funkci povolte v části Nástroje > Možnosti > textového editoru > C/C++ > Experimentální. Nastavte zakázat experimentální Linter kódu na false. Další informace najdete v blogu týmu C++.

  • Do C++: C26817, C26818, C26818, C26819 a C26820 jsme přidali čtyři nová pravidla analýzy kódu.

  • Přidali jsme špičkovou podporu pro ladění projektů CMake na vzdálených systémech s gdbserverem.

  • Snazší vyhledávání chyb poškození paměti díky experimentální implementaci funkce AddressSanitizer pro C++ ve Visual Studiu je nově dostupné pro nativní projekty x64. Nyní také podporujeme použití modulů runtime ladění (/MTd, /MDd, /LDd).

  • IntelliSense teď nabízí základní podporu pro funkci Concepts, vyhrazené inicializátory a několik dalších funkcí jazyka C++20.

  • .ixx a .cppm soubory jsou nyní rozpoznány jako C++ a jsou považovány za takové pomocí zvýrazňovače syntaxe a Technologie IntelliSense.

Novinky pro C++ v sadě Visual Studio verze 16.6

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.6 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.6.

  • Vylepšené generování komentářů Doxygen/XML: Automatické generování komentářů doxygenu nebo dokumentu XML zadáním /// nebo /** nad funkcemi Tyto informace se teď zobrazují také v popisech Rychlé informace.

  • Podpora Ninja pro CMake pro Linux/WSL: Při vytváření projektů CMake ve WSL nebo vzdáleném systému používejte Ninja jako základní generátor. Jedná se o aktuální výchozí generátor pro přidání nové konfigurace Linuxu nebo WSL.

  • Ladění šablon pro vzdálené ladění CMake: Zjednodušili jsme šablony pro ladění projektů CMake ve vzdáleném systému Linux nebo WSL s gdb.

  • Počáteční podpora konceptů C++20: IntelliSense teď rozpozná koncepty C++20 a navrhne je v seznamu členů.

Novinky pro C++ v sadě Visual Studio verze 16.5

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.5 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.5.

  • Podpora modelů Dokončování týmu IntelliCode a členských proměnných: Vývojáři jazyka C++ teď můžou trénovat modely IntelliCode na vlastních základech kódu. Říkáme tomu model týmového dokončování, protože můžete využívat postupy svého týmu. Kromě toho jsme vylepšili návrhy IntelliCode pro členské proměnné.

  • Vylepšení IntelliSense:

    • IntelliSense teď při práci se standardní knihovnou zobrazuje čitelnější názvy typů.
    • Přidali jsme možnost přepínat, jestli enter, mezera a tabulátor fungují jako potvrzovací znaky a jestli se tab používá k vložení fragmentu kódu. Tato nastavení najdete v části Možnosti textového editoru > nástrojů > > C/C++ > Advanced > IntelliSense.
  • Správce připojení přes příkazový řádek: Teď můžete pracovat s uloženými vzdálenými připojeními přes příkazový řádek. Je užitečné pro úlohy, jako je zřízení nového vývojového počítače nebo nastavení sady Visual Studio v kontinuální integraci.

  • Ladění a nasazení pro WSL: Pomocí nativní podpory sady Visual Studio pro WSL oddělte systém sestavení od vzdáleného systému nasazení. Teď můžete nativně sestavovat ve WSL a nasazovat artefakty sestavení do druhého vzdáleného systému pro účely ladění. Tento pracovní postup podporují projekty CMake i linuxové projekty založené na MSBuildu.

  • Podpora režimu dodržování předpisů FIPS 140-2: Visual Studio teď podporuje režim dodržování předpisů FIPS 140-2 při vývoji aplikací C++, které cílí na vzdálený systém Linux.

  • Jazykové služby pro soubory jazyka CMake a lepší manipulace s projektem CMake:

    • Byla optimalizována kopie zdrojového souboru pro projekty CMake, které cílí na vzdálený systém Linux. Visual Studio teď uchovává „soubor s otiskem“ poslední vzdáleně zkopírované sady zdrojů a optimalizuje chování na základě počtu souborů, které se změnily.

    • Funkce navigace kódu, jako je Přejít k definici a Najít všechny odkazy, jsou nyní podporovány pro funkce, proměnné a cíle v souborech skriptů CMake.

    • Přidávejte, odstraňujte a přejmenovávejte zdrojové soubory a cíle v projektech CMake z integrovaného vývojového prostředí bez nutnosti ručních úprav skriptů CMake. Když přidáváte nebo odebíráte soubory pomocí Průzkumníka řešení, Visual Studio automaticky upraví projekt CMake. Cíle projektu můžete také přidávat, odebírat a přejmenovávat v zobrazení cílů Průzkumníka řešení.

  • Vylepšení projektů v Linuxu: Projekty sady Visual Studio pro Linux teď mají přesnější IntelliSense a umožňují řídit vzdálenou synchronizaci hlaviček na základě projektu.

Novinky pro C++ v sadě Visual Studio verze 16.4

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.4 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.4.

  • Analýza kódu teď nativně podporuje Clang-Tidy projekty MSBuild i CMake bez ohledu na to, jestli používáte sadu nástrojů Clang nebo MSVC. Kontroly Clang-Tidy mohou běžet jako součást analýzy kódu na pozadí, zobrazovat se jako upozornění v editoru (vlnovky) a zobrazovat se v seznamu chyb.

  • Projekty CMake sady Visual Studio teď mají stránky s přehledem, které vám pomůžou začít s vývojem pro různé platformy. Tyto stránky jsou dynamické a umožňují vám připojit se k systému Linux a přidat do projektu CMake konfiguraci pro Linux nebo WSL.

  • V rozevírací nabídce pro projekty CMake se teď zobrazují naposledy použité cíle a dají se filtrovat.

  • C++/CLI teď ve Windows podporuje interoperabilitu s .NET Core 3.1 a novějším.

  • Můžete teď povolit ASan pro projekty zkompilované pomocí MSVC ve Windows za účelem instrumentace kódu C++ za běhu, což pomáhá s detekcí chyb paměti.

  • Aktualizace Standardní knihovny C++ pro MSVC:

    • C++17: Implementovali to_chars() jsme obecnou přesnost a dokončili P0067R5 převody elementárních řetězců (charconv). Tím se dokončí implementace všech funkcí knihovny na úrovni C++17 Standard.
    • C++20: Implementovali jsme koncepty přejmenování P1754R1 pro standard_case. Pokud chcete zahrnout tyto funkce, použijte možnost kompilátoru /std:c++latest (nebo /std:c++20 začněte v sadě Visual Studio 2019 verze 16.11). Možnost lze také nastavit na stránce vlastností projektu jazyka C/C++ vlastnosti jazyka > C++ > pomocí vlastnosti Standard jazyka C++.
  • Nyní je k dispozici nová kolekce nástrojů s názvem C++ Build Insights . Další informace o oznámení najdete v blogu týmu C++.

Novinky pro C++ v sadě Visual Studio verze 16.3

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.3 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.3.

  • Vývojáři C++ teď můžou přepínat komentáře řádků pomocí klávesové zkratky Ctrl+K, Ctrl+/.

  • Seznamy členů IntelliSense jsou nyní filtrovány na základě kvalifikátorů typu, například teď filtruje metody, const std::vector jako push_backje .

  • Přidali jsme tyto funkce standardní knihovny C++20 (dostupné v /std:c++latest/std:c++20 sadě Visual Studio 2019 verze 16.11):

    • P0487R1: Opravaoperator>>(basic_istream&, CharT*)
    • P0616R0: Použití v move()<numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: Rozšíření C++ pro Koncepty
    • P0898R3: Koncepty standardní knihovny
    • P0919R3: Heterogenní vyhledávání pro neuspořádané kontejnery
  • Nové kontroly obecných zásad jazyka C++, včetně nové sady pravidel výčtu a dalších constenumpravidel a typů.

  • Díky novému výchozímu schématu sémantického zabarvení uživatelé snáze a jedním pohledem porozumí kódu. Kromě toho se dá okno zásobníku volání nakonfigurovat tak, aby skrývalo argumenty šablony a funkce C++ IntelliCode je ve výchozím nastavení zapnutá.

  • Cíle ladění a vlastní úlohy můžete konfigurovat pomocí proměnných prostředí s použitím CMakeSettings.json nebo CppProperties.json nebo nové značky env u jednotlivých cílů a úloh v launch.vs.json a tasks.vs.json.

  • Uživatelé teď můžou u chybějících balíčků vcpkg použít rychlou akci pro automatické otevření konzoly a instalaci výchozího balíčku vcpkg.

  • Vzdálené kopírování hlaviček, které prováděly projekty Linuxu (CMake a MSBuild), je optimalizované a nyní běží paralelně.

  • Nativní podpora sady Visual Studio pro WSL teď podporuje paralelní sestavování pro projekty Linuxu přes MSBuild.

  • Uživatelé teď můžou zadat seznam místních výstupů sestavení, které se nasadí do vzdáleného systému pomocí projektů se souborem pravidel pro Linux.

  • Popisy nastavení v Editoru nastavení CMake teď nabízejí více kontextu a odkazy na užitečnou dokumentaci.

  • Základní model C++ pro IntelliCode je teď ve výchozím nastavení povolený. Toto nastavení můžete změnit tak, že přejdete na Nástroje>Možnosti>IntelliCode.

Novinky v jazyce C++ v sadě Visual Studio verze 16.2

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.2 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.2.

  • Pro místní projekty CMake nakonfigurované na používání nástroje Clang teď analýza kódu spouští kontroly Clang-Tidy, které se zobrazují jako součást analýzy kódu na pozadí, v upozorněních v editoru (podtržení vlnovkou) a v seznamu chyb.

  • Byly aktualizovány převody základních řetězců P0067R5 hlavičky <charconv> pro C++17:

    • Byla přidána přetížení s plovoucí desetinnou čárkouto_chars() pro přesnosti chars_format::fixed a chars_format::scientific (chars_format::general precision je jediná část, která ještě nebyla implementována).
    • Proběhla optimalizace pro nejkratší zápis chars_format::fixed.
  • Přidali jsme tyto funkce standardní knihovny C++20:

    • /std:c++latest K dispozici v sadě Visual /std:c++20 Studio 2019 verze 16.11:
      • P0020R6: atomic<floating-point>
      • P0463R1: endian – výčet
      • P0482R6: typ char8_t pro kódování znaků a řetězců UTF-8
      • P0653R2: to_address() pro převod ukazatele na nezpracovaný ukazatel
    • /std:c++17 /std:c++latest Dostupné v sadě Visual Studio 2019 verze 16.11 nebo /std:c++20 od verze 16.11):
      • P0600R1: [[nodiscard]] v knihovně
    • K dispozici bezpodmínečně:
      • P0754R2: hlavička <version>
      • P0771R1: přesun std::function by měl být noexcept.
  • Sada Windows SDK už nepředstavuje závislost pro komponenty CMake pro Windows a CMake pro Linux.

  • Vylepšení linkeru C++ vedoucí k výraznému zkrácení dob sestavení iterace i u největších vstupů. /DEBUG:FAST a /INCREMENTAL časy jsou v průměru dvakrát tak rychlé a /DEBUG:FULL nyní jsou třikrát až šestkrát rychlejší.

Novinky pro C++ v sadě Visual Studio verze 16.1

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.1 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.1.

kompilátor C++

  • Tyto funkce C++20 byly implementovány v kompilátoru jazyka C++, který je k dispozici /std:c++latest v sadě Visual Studio 2019 verze 16.11( nebo /std:c++20 od verze 16.11):

    • Vylepšili jsme schopnost najít šablony funkcí prostřednictvím vyhledávání závislého na argumentech pro výrazy volání funkce s explicitními argumenty šablon (P0846R0).
    • Vyhrazená inicializace (P0329R4), která umožňuje výběr konkrétních členů v agregované inicializaci, například pomocí Type t { .member = expr } syntaxe.
  • Udělali jsme důkladnou revizi podpory Lambda, která řeší celou řadu starých chyb. Tato změna je ve výchozím nastavení povolena při použití /std:c++20 nebo /std:c++latest. V /std:c++17 jazykovém režimu a ve výchozím režimu (/std:c++14 ) je možné nový analyzátor povolit v /Zc:lambda sadě Visual Studio 2019 verze 16.9 nebo novější (dříve k dispozici jako /experimental:newLambdaProcessor začátek sady Visual Studio 2019 verze 16.3), například /std:c++17 /Zc:lambda.

Vylepšení standardní knihovny C++

  • Tyto funkce C++20 byly přidány do naší implementace standardní knihovny C++, která je k dispozici v části /std:c++latest:
    • starts_with a ends_with pro basic_string a basic_string_view.
    • contains pro asociativní kontejnery.
    • remove, remove_if a unique pro list a forward_list teď vrací size_type.
    • Přidali jsme shift_left a shift_right k <algorithm>.

C++ IDE

IntelliCode pro C++

IntelliCode se teď dodává jako volitelná komponenta při vývoji desktopových aplikací pomocí úlohy C++ . Další informace naleznete v tématu Vylepšené C++ IntelliCode nyní dodává se sadou Visual Studio 2019.

IntelliCode používá vlastní rozsáhlé trénování a kontext kódu k uvedení toho, co s největší pravděpodobností použijete v horní části seznamu dokončení. Často se tím eliminuje nutnost procházet seznamem dolů. V jazyce C++ nabízí IntelliCode největší nápovědu při používání oblíbených knihoven, jako je standardní knihovna.

Nové funkce IntelliCode (vlastní modely, podpora jazyka C++ a odvození EditorConfig) jsou ve výchozím nastavení zakázané. Pokud je chcete povolit, přejděte na Možnosti > nástrojů > IntelliCode > Obecné. Tato verze IntelliCode je přesnější a zahrnuje podporu pro bezplatné funkce. Další informace najdete v tématu Návrhy dokončování kódu s asistencí umělé inteligence, které přicházejí do jazyka C++ prostřednictvím intelliCode.

Vylepšení rychlých informací

  • Popis Rychlé informace teď respektuje sémantické zabarvení editoru. Obsahuje také nový odkaz Search Online , který vyhledá online dokumentaci pro informace o konstruktoru kódu najetého myší. Odkaz poskytnutý rychlými informacemi pro kód s červenou vlnovku vyhledá chybu online. Tímto způsobem nemusíte zprávu znovu zadávat do prohlížeče. Další informace najdete v tématu Vylepšení rychlých informací v sadě Visual Studio 2019: Zabarvení a vyhledávání online.

Obecná vylepšení

  • Panel šablon může naplnit rozevírací nabídku podle instancí dané šablony v základu kódu.

  • Žárovky pro chybějící #include direktivy, které vcpkg mohou nainstalovat, a automatické dokončování dostupných balíčků pro direktivu CMake find_package .

  • Stránka obecné vlastnosti pro projekty C++ byla revidována. Některé možnosti jsou teď uvedené na nové stránce Upřesnit . Stránka Upřesnit obsahuje také nové vlastnosti pro preferovanou architekturu sady nástrojů, knihovny ladění, podverzi sady nástrojů MSVC a buildy Unity (jumbo).

Podpora CMake

  • Aktualizovali jsme verzi CMake, která se dodává se sadou Visual Studio na verzi 3.14. Tato verze přidává integrovanou podporu pro generátory MSBuild, které cílí na projekty Visual Studio 2019 a také rozhraní API integrace integrovaného vývojového prostředí na základě souborů.

  • Do Editoru nastavení CMake jsme přidali vylepšení, včetně podpory Subsystém Windows pro Linux (WSL) a konfigurací z existujících mezipamětí, změn výchozích kořenových certifikátů sestavení a instalace a podpory proměnných prostředí v konfiguracích Linux CMake.

  • Dokončování a rychlé informace pro předdefinované příkazy, proměnné a vlastnosti CMake usnadňují úpravu CMakeLists.txt souborů.

  • Integrovali jsme podporu pro úpravy, sestavování a ladění projektů CMake pomocí Clang/LLVM. Další informace najdete v tématu Podpora Clang/LLVM v sadě Visual Studio.

Linux a Subsystém Windows pro Linux

analýza kódu

Vzdálená sestavení

  • Při cílení na Linux teď můžou uživatelé v projektech MSBuild i CMake oddělit vzdálený počítač s buildem od vzdáleného počítače pro ladění.

  • Vylepšené protokolování pro vzdálená připojení usnadňuje diagnostiku problémů při vývoji pro různé platformy.

Novinky pro C++ v sadě Visual Studio verze 16.0

Souhrn nových funkcí a oprav chyb v sadě Visual Studio verze 16.0 najdete v tématu Co je nového v sadě Visual Studio 2019 verze 16.0.

kompilátor C++

  • Vylepšená podpora funkcí C++17 a oprav správnosti a experimentální podpora funkcí C++20, jako jsou moduly a korutiny. Podrobné informace naleznete v tématu Vylepšení shody jazyka C++ v sadě Visual Studio 2019.

  • Tato /std:c++latest možnost teď obsahuje funkce C++20, které nejsou nutně dokončené, včetně počáteční podpory operátoru <=> C++20 ("spaceship") pro trojcestné porovnání.

  • Přepínač /Gm kompilátoru jazyka C++ je teď zastaralý. Pokud je přepínač explicitně definovaný, zvažte zakázání /Gm přepínače ve skriptech sestavení. Upozornění na /Gmvyřazení ale můžete také bezpečně ignorovat, protože při použití příkazu "Považovat upozornění za chyby"/WX () se nezachází jako s chybou.

  • S tím, jak MSVC začne implementovat funkce ze standardního konceptu C++20 pod /std:c++latest příznakem, /std:c++latest je nyní nekompatibilní s /clr (všechny příchutě) /ZWa /Gm. V sadě Visual Studio 2019 používejte /std:c++17 nebo /std:c++14 režimy při kompilaci pomocí /clr, /ZWnebo /Gm (ale podívejte se na předchozí odrážku).

  • U aplikací C++ pro konzoly a klasickou pracovní plochu se už negenerují předkompilované hlavičky.

Codegen, zabezpečení, diagnostika a správa verzí

Vylepšená analýza pro zajištění pomoci se zmírněním /Qspectre rizik pro Spectre Variant 1 (CVE-2017-5753). Další informace naleznete v tématu Spectre Mitigations in MSVC.

Vylepšení standardní knihovny C++

  • Implementace dalších funkcí knihovny C++17 a C++20 a oprav správnosti Podrobné informace naleznete v tématu Vylepšení shody jazyka C++ v sadě Visual Studio 2019.

  • Jazyk Clang-Format byl použit pro hlavičky standardní knihovny jazyka C++, aby se zlepšila čitelnost.

  • Vzhledem k tomu, že Visual Studio teď podporuje pouze můj kód pro C++, standardní knihovna už nemusí poskytovat vlastní stroje a std::function std::visit dosáhnout stejného efektu. Odstranění strojního zařízení z velké části nemá žádné efekty viditelné uživatelem. Jednou z výjimek je, že kompilátor již nebude vytvářet diagnostiku, která indikuje problémy na řádku 15732480 nebo 16707566 nebo <type_traits> <variant>.

Vylepšení výkonu a propustnosti v kompilátoru a standardní knihovně

  • Vylepšení propustnosti sestavení, včetně způsobu, jakým linker zpracovává vstupně-výstupní operace souboru, a čas propojení při slučování a vytváření typů PDB.

  • Byla přidána základní podpora vektorizace OpenMP SIMD. Můžete ho povolit pomocí nového přepínače /openmp:experimentalkompilátoru . Tato možnost umožňuje smyčky anotované #pragma omp simd s možností vektorizace. Vektorizace není zaručená a smyčky anotované, ale ne vektorizované, zobrazí se upozornění. Nejsou podporovány žádné klauzule SIMD; jsou ignorovány a zobrazí se upozornění.

  • Přidali jsme nový vložený přepínač /Ob3příkazového řádku , což je agresivnější verze /Ob2. /O2 (optimalizace binárního souboru pro rychlost) ve výchozím nastavení stále implikuje /Ob2 . Pokud zjistíte, že kompilátor není dostatečně vložený, zvažte předání /O2 -Ob3.

  • Přidali jsme podporu vnitřních funkcí SVML (Short Vector Math Library). Tyto funkce počítají 128bitové, 256bitové nebo 512bitové ekvivalenty vektorů. Přidali jsme je pro podporu vektorizace smyček pomocí volání funkcí matematické knihovny a některých dalších operací, jako je dělení celých čísel. Definice podporovaných funkcí najdete v příručce Intel Intrinsic Guide.

  • Nové a vylepšené optimalizace:

    • Konstantní skládání a aritmetické zjednodušení výrazů využívajících vnitřní objekty vektoru SIMD pro plovoucí i celočíselné formuláře.

    • Výkonnější analýza pro extrakci informací z toku řízení (if/else/switch příkazy) pro odebrání větví se vždy ukázala jako pravdivá nebo nepravda.

    • Vylepšili jsme zrušení registrace memset pro použití vektorových instrukcí SSE2.

    • Vylepšené odebrání neužitejších kopií struktury nebo třídy, zejména pro programy C++, které předávají hodnotu.

    • Vylepšená optimalizace kódu, memmovejako std::copy je například nebo std::vector std::string konstrukce.

  • Optimalizovali jsme fyzický návrh standardní knihovny, aby se zabránilo kompilaci částí standardní knihovny, které nejsou přímo zahrnuty. Tato změna vyřízla čas sestavení prázdného souboru, který zahrnuje pouze <vector> polovinu. V důsledku toho může být nutné přidat #include direktivy pro hlavičky, které byly dříve nepřímo zahrnuty. Například kód, který nyní používá std::out_of_range , musí přidat #include <stdexcept>. Kód, který používá operátor vložení datového proudu, teď může potřebovat přidat #include <ostream>. Výhodou je, že pouze jednotky překladu, které skutečně používají <stdexcept> , nebo <ostream> komponenty platí náklady na propustnost, aby je zkompilovaly.

  • if constexpr byla použita na více místech ve standardní knihovně pro vylepšenou propustnost a menší velikost kódu v operacích kopírování, v permutacích, jako je obrácení a otočení, a v knihovně paralelních algoritmů.

  • Standardní knihovna teď interně používá if constexpr ke snížení doby kompilace, a to i v režimu C++14.

  • Detekce dynamického propojení modulu runtime pro knihovnu paralelních algoritmů už nepoužívá k uložení pole ukazatele funkce celou stránku. Označení této paměti jen pro čtení se už pro účely zabezpečení nepovažuje za relevantní.

  • Konstruktor std::thread už nečeká na spuštění vlákna a už nevloží tolik vrstev volání funkce mezi podkladovou knihovnou _beginthreadex jazyka C a zadaným volatelným objektem. std::thread Dříve bylo mezi zadaný volatelný objekt vloženo šest funkcí_beginthreadex. Toto číslo bylo sníženo pouze na tři, z nichž dva jsou pouze std::invoke. Tato změna také řeší nejasnou chybu časování, kdy std::thread konstruktor přestane reagovat, pokud se systémové hodiny změnily přesně v okamžiku std::thread vytvoření.

  • Opravili jsme regresi std::hash výkonu, kterou jsme zavedli při implementaci std::hash<std::filesystem::path>.

  • Standardní knihovna teď k dosažení správnosti používá destruktory místo bloků catch na několika místech. Výsledkem této změny je lepší interakce ladicího programu: Výjimky, které vyvoláte standardní knihovnou v ovlivněných umístěních, se teď zobrazují jako vyvolány z původního webu vyvolání, nikoli z našeho opětovného zvětšování. Ne všechny standardní bloky catch knihovny byly odstraněny. Očekáváme snížení počtu bloků catch v pozdějších verzích MSVC.

  • Neoptimální kódgen způsobený std::bitset podmíněným vyvoláním uvnitř noexcept funkce byl opraven faktorem vyvolanou cestou.

  • Iterátory std::list , které nejsou laděné, a std::unordered_* rodina používají interně na více místech.

  • Několik std::list členů bylo změněno tak, aby opakovaně používalo uzly seznamu, místo aby je bylo možné uvolnit a znovu přidělit. Například vzhledem k list<int> tomu, že už má velikost 3, volání, které assign(4, 1729) teď přepíše int hodnoty v prvních třech uzlech seznamu, a přidělí jeden nový uzel seznamu s hodnotou 1729.

  • Všechna standardní volání knihovny byla erase(begin(), end()) změněna na clear().

  • std::vector nyní inicializuje a vymaže prvky efektivněji v určitých případech.

  • Vylepšení, která std::variant usnadňují optimalizaci, což vede k lepšímu vygenerování kódu. Vkládání kódu je nyní mnohem lepší s std::visit.

C++ IDE

Podpora Live Share C++

Live Share teď podporuje C++, což vývojářům umožňuje spolupracovat v reálném čase pomocí sady Visual Studio nebo Visual Studio Code. Další informace naleznete v tématu Oznámení Live Share pro C++: Sdílení v reálném čase a spolupráce

Šablona IntelliSense

Panel šablon teď používá uživatelské rozhraní náhledu okna místo modálního okna, podporuje vnořené šablony a předem vyplní všechny výchozí argumenty do okna Náhled. Další informace naleznete v tématu Vylepšení IntelliSense šablony pro Visual Studio 2019 Preview 2. Rozevírací seznam Naposledy použité na panelu šablon umožňuje rychle přepínat mezi předchozími sadami ukázkových argumentů.

Nové prostředí úvodního okna

Při spuštění integrovaného vývojového prostředí se zobrazí nové úvodní okno. Nabízí možnosti otevření posledních projektů, klonování kódu ze správy zdrojového kódu, otevření místního kódu jako řešení nebo složky nebo vytvoření nového projektu. Dialogové okno Nový projekt bylo také přepracováno do vyhledávacího a filtrovatelného prostředí.

Nové názvy některých šablon projektů

Upravili jsme několik názvů a popisů šablon projektu tak, aby se vešel do aktualizovaného dialogového okna Nový projekt.

Různá vylepšení produktivity

Visual Studio 2019 obsahuje následující funkce, které vám pomůžou usnadnit a intuitivnější kódování:

  • Rychlé opravy pro:
    • Přidat chybějící #include
    • NULL na nullptr
    • Přidání chybějícího středníku
    • Řešení chybějícího oboru názvů nebo oboru názvů
    • Nahrazení chybných operandů nepřímých závorek (* do & a & do *)
  • Rychlé informace o bloku najetím myší na pravou složenou závorku
  • Náhled hlavičky / souboru kódu
  • Otevření souboru v části Přejít na definici #include

Další informace naleznete v tématu Vylepšení produktivity jazyka C++ v sadě Visual Studio 2019 Preview 2.

Podpora CMake

  • Podpora pro CMake 3.14

  • Visual Studio teď může otevřít existující mezipaměti CMake generované externími nástroji, jako je CMakeGUI, přizpůsobené systémy meta buildu nebo skripty sestavení, které vyvolávají cmake.exe samy.

  • Vylepšený výkon IntelliSense.

  • Nový editor nastavení nabízí alternativu k ruční úpravě souboru CMakeSettings.json a poskytuje určitou paritu s CMakeGUI.

  • Visual Studio vám pomůže rozběhnout vývoj v jazyce C++ s nástroji CMake na Linuxu díky rozpoznání, jestli máte na počítači s Linuxem kompatibilní verzi CMake. Pokud ne, aplikace vám nabídne její instalaci.

  • Nekompatibilní nastavení v CMakeSettings, jako jsou neshodované architektury nebo nekompatibilní nastavení generátoru CMake, zobrazují v editoru JSON vlnovku a chyby v seznamu chyb.

  • Po spuštění příkazu vcpkg integrate install se automaticky rozpozná sada nástrojů vcpkg a povolí se pro projekty CMake, které jsou otevřené v integrovaném vývojovém prostředí. Toto chování můžete vypnout tak, že v nástroji CMakeSettings zadáte prázdný soubor sady nástrojů.

  • Projekty CMake teď ve výchozím nastavení aktivují ladění s možností Pouze můj kód.

  • Upozornění statické analýzy se teď zpracovávají na pozadí a zobrazují se v editoru projektů CMake.

  • Jasnější sestavení a konfigurace zpráv "begin" a "end" pro projekty CMake a podporu uživatelského rozhraní průběhu sestavení sady Visual Studio. Kromě toho teď v možnostech nástrojů > existuje nastavení podrobností CMake, které přizpůsobí úroveň podrobností sestavení a konfiguračních zpráv CMake v okně Výstup.

  • Nastavení cmakeToolchain je nyní podporováno v CMakeSettings.json, aby bylo možné zadat sady nástrojů bez ruční úpravy příkazového řádku CMake.

  • Nová klávesová zkratka nabídky Sestavit vše Ctrl+Shift+B.

Integrace incrediBuild

IncrediBuild je součástí volitelné komponenty při vývoji desktopových aplikací s úlohou C++ . Monitorování sestavení IncrediBuild je plně integrované v integrovaném vývojovém prostředí sady Visual Studio. Další informace najdete v tématu Vizualizace sestavení pomocí nástroje IncrediBuild Build Monitor a Visual Studio 2019.

Ladění

  • U aplikací C++ běžících ve Windows se teď soubory PDB načítají do samostatného 64bitového procesu. Tato změna řeší rozsah chyb způsobených nedostatkem paměti ladicího programu. Například při ladění aplikací, které obsahují velký počet modulů a souborů PDB.

  • Vyhledávání je povolené v oknech Kukátek, Automatické hodnoty a Místní hodnoty.

Vývoj desktopových aplikací pro Windows pomocí jazyka C++

  • Tyto průvodce C++ ATL/MFC už nejsou k dispozici:

    • Průvodce komponentami ATL COM+ 1.0
    • Průvodce komponentou ATL Active Server Pages
    • Průvodce zprostředkovatelem ATL OLE DB
    • Průvodce stránkou vlastností ATL
    • Průvodce příjemcem ATL OLE DB
    • Příjemce ROZHRANÍ ODBC MFC
    • MFC – třída z ovládacího prvku ActiveX
    • MFC – třída z knihovny Type Lib.

    Vzorový kód pro tyto technologie se archivuje v Microsoft Learn a v úložišti GitHub VCSamples.

  • Sada Windows 8.1 Software Development Kit (SDK) už není v instalačním programu sady Visual Studio k dispozici. Doporučujeme upgradovat projekty C++ na nejnovější sadu Windows SDK. Pokud někde používáte pevnou závislost na sadě Windows 8.1 SDK, můžete si ji stáhnout z archivu sad Windows SDK.

  • V nejnovější sadě nástrojů C++ už nebude k dispozici cílení na Windows XP. Cílení na XP s kompilátorem MSVC na úrovni VS 2017 je stále podporováno a lze je nainstalovat prostřednictvím jednotlivých komponent.

  • Naše dokumentace aktivně odrazuje od používání slučovacích modulů k nasazení modulu Runtime Visual C++. Tento krok navíc používáme k označení našich MSM jako zastaralých. Zvažte migraci centrálního nasazení VCRuntime z balíčků MSM na balíček opětovné distribuce.

Vývoj mobilních aplikací pomocí C++ (Android a iOS)

Výchozím prostředím C++ Android je nyní Android SDK 25 a Android NDK 16b.

Sada nástrojů platformy Clang/C2

Experimentální komponenta Clang/C2 byla odebrána. Sada nástrojů MSVC slouží k úplnému souladu se /permissive- standardy jazyka C++ a /std:c++17nebo sady nástrojů Clang/LLVM pro Windows.

Analýza kódu

Testování částí

Šablona spravovaného testovacího projektu C++ už není dostupná. Ve stávajících projektech můžete dál používat architekturu Managed C++ Test Framework. U nových testů jednotek zvažte použití jedné z nativních testovacích architektur, pro které Visual Studio poskytuje šablony (MSTest, Google Test) nebo šablonu spravovaného testovacího projektu jazyka C#.