Co je nového pro C++ v 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žností Nahlásit problém a Poskytnout návrh v části Poslatnázor. Děkujeme vám, že hlásíte chyby!

Další informace o novinách v celé Visual Studio najdete na stránce Co je nového 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 novince jazyka C++ v Visual Studio 2015 a starších verzích najdete v tématu Visual C++ Co je nového od 2003 do roku 2015. 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 16.11

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

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

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

  • Podpora Clang-cl se aktualizovala na LLVM 12.

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

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

  • Všechny funkce C++20 jsou teď dostupné v části /std:c++latest . Přestože MSVC standardů C++20 (aktuálně publikovaných iso) je dokončená, očekává se, že některé klíčové funkce knihovny C++20 budou upraveny připravovanou opravou chyb (opravy chyb ISO C++20), které je mohou změnit nekompatibilním způsobem ABI. Další podrobnosti najdete v tématu Problém Microsoft/STL č. 1814.

    • Podpora constinit pro okamžité funkce C++20 & přidaná ve verzi 16.10
    • Poslední části: nové <chrono> hodiny, přeskakující sekundy, časová pásma a parsování
    • Implementace <format> pro formátování textu
  • /openmp:llvm je teď k dispozici na x86 a ARM64 kromě x64

  • Adresáře include je teď možné s přizpůsobenou úrovní upozornění kompilace a nastavením analýzy kódu nastavit jako externí.

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

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

  • Přidání podpory pro CMakePresets

  • Teď musíte přijmout nebo zakázat otisk klíče hostitele, který server předá při přidávání nového vzdáleného připojení v Visual Studio.

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

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

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

  • Sanitizér adres:

    • Naše podpora sanitizéru adres v Windows není experimentální režim a dosáhla obecné dostupnosti.

    • Rozšířili RtlAllocateHeap jsme podporu, opravili jsme problém s kompatibilitou se RtlCreateHeap zachytávači a při vytváření fondů RtlAllocateHeap spustitelných pamětí.

    • Přidali jsme podporu pro GlobalAlloc starší LocalAlloc verzi a rodinu paměťových funkcí. Tyto zachytávače můžete povolit nastavením příznaku prostředí ASAN_OPTIONS=windows_hook_legacy_allocators=true .

    • 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 navrhují vygenerování ladicích informací, pokud zjistí, že používáte ASan, ale nevysíláte ladicí informace.

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

  • Visual Studio projekty CMake teď mají prvotřídní podporu pro vývoj Windows aplikací. 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 zahrnutých verzích 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 zahrnutých verzích najdete ve zprávě k vydání verze pro CMake 3.19.

  • Mnoho typů lock/guard v STL jsme označili jako .

  • IntelliSense:

    • Byla vylepšena stabilita a funkčnost poskytování importovaných modulů a dokončování jednotek hlaviček v IntelliSense.

    • Přidali jsme přejít k definici u importů modulů, podporu indexování pro a přesnější referenční informace k modulům export {...} se stejným názvem.

    • Vylepšili jsme shodu jazyka C++ IntelliSense přidáním podpory pro inicializaci kopírování dočasné funkce v přímé inicializaci odkazu a , opravu nekonziferencí mezi funkcemi a , časových období s rozšířenou životností v konstantních výrazech a podobných typů a vazby __builtin_memmoveconsteval. __builtin_memmoveconstexpr

    • Bylo přidáno dokončování pro make_unique, make_shared, emplace a emplace_back, které poskytuje dokončování na základě zadaného parametru typu.

  • 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éru adres na příkazovém řádku teď potřebujete kompilátoru předat /fsanitize=address pouze parametr .

  • 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 Více kontejnerů Constexpr,která umožňuje, aby destruktory a nové výrazy byly . Tím se připravuje cesta pro nástroje, jako jsou a constexprstd::vectorstd::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 teď podporované v kompilátoru MSVC funkcí.

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

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

  • Koruiny C++20 se teď podporují v rámci (nebo od /std:c++latest/std:c++20 verze Visual Studio 2019 verze 16.11) a <coroutine> hlavičky .

  • 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 se teď podporují pod přepínači a /std:c17 .

  • Mezi další vylepšení STL patří plná podpora std::atomic_ref pro , std::atomic_ref a , optimalizace pro a std::execution::unseqstd::reverse_copy 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ší vcpkg oznámení.

  • Podpora kompilátoru pro výrazy 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í Visual Studio teď podporuje char8_t .

  • Podpora projektů ARM64 pomocí clang-cl

  • Podpora vnitřních funkcí Intel AMX

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

Souhrn nových funkcí a oprav chyb v Visual Studio verze 16.7 najdete v tématu Co je nového ve verzi 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 existující vzdálené připojení (například pokud se změní 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 nabídce nástroje možnosti > textový editor > C/C++ > experimentální. Nastavte Zakázat experimentální kód Linter na hodnotu false. Další informace najdete v blogu týmu C++.

  • Přidali jsme čtyři nová pravidla analýzy kódu pro začlenění dalších bezpečnostních funkcí do C++: C26817, C26818, C26819 a C26820.

  • 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í podporujeme také použití běhových modulů 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.cppmsoubory a se teď rozpoznávají jako C++ a považují se za to, že se zvýrazní pomocí zvýrazňovače syntaxe a IntelliSense.

co je nového v jazyce C++ v Visual Studio verze 16,6

shrnutí nových funkcí a oprav chyb ve verzi Visual Studio 16,6 najdete v článku novinky v Visual Studio 2019 verze 16,6.

  • Vylepšené generování komentářů Doxygen/XML: Automatické generování zástupných kódů Doxygen nebo XML doc v dokumentu XML zadáním nebo /** více funkcí Tyto informace se teď zobrazují také v popisech Rychlé informace.

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

  • Šablony ladění pro vzdálené ladění nástrojů CMake: Zjednodušili jsme šablony pro ladění projektů v nástroji CMake na vzdáleném systému Linux nebo WSL s GDB.

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

co je nového v jazyce C++ v Visual Studio verze 16,5

shrnutí nových funkcí a oprav chyb ve verzi Visual Studio 16,5 najdete v článku novinky v Visual Studio 2019 verze 16,5.

  • IntelliCode týmu dokončuje model a členské proměnné podporují: Vývojáři C++ teď můžou IntelliCode modely na vlastní základy 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 funkce ENTER, MEZERNÍKa TAB slouží jako potvrzení znaků, a přepínat, jestli se má pro vložení fragmentu použít karta . Tato nastavení najdete v části nástroje možnosti > textový editor > C/C++ > Pokročilá > technologie IntelliSense.
  • Správce připojení na příkazovém řádku: Teď můžete pracovat s uloženými vzdálenými připojeními přes příkazový řádek. je vhodný pro úlohy, jako je například zřízení nového vývojového počítače nebo nastavení Visual Studio v průběžné integraci.

  • Ladění a nasazení pro WSL: použijte nativní podporu Visual Studio pro WSL k oddělení sestavovacího systému od vzdáleného systému nasazení. Nyní můžete vytvářet nativně na WSL a nasazovat artefakty sestavení do druhého vzdáleného systému pro 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 jazykové soubory CMake a lepší manipulace s projekty 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.

    • Nyní jsou podporovány funkce pro navigaci v kódu, jako Přejít k definici a Najít všechny odkazy, a to 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í projektu pro linux: Visual Studio projekty pro linux nyní mají přesnější technologii IntelliSense a umožňují řídit vzdálenou synchronizaci hlaviček na základě projektu.

co je nového v jazyce C++ v Visual Studio verze 16,4

shrnutí nových funkcí a oprav chyb ve verzi Visual Studio 16,4 najdete v článku novinky v Visual Studio 2019 verze 16,4.

  • Code Analysis se teď nativně podporuje Clang-Tidy pro projekty MSBuild a 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.

  • Rozevírací nabídka spustit pro projekty cmake teď zobrazuje vaše naposledy použité cíle a dá 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: implementovala to_chars() se obecná přesnost a dokončuje se to_chars() základní řetězcové převody (charconv). Tím se dokončí implementace všech funkcí knihovny na úrovni C++17 Standard.
    • C++20: Byly implementovány koncepty přejmenování P1754R1 se standard_case. chcete-li tyto funkce zahrnout, použijte /std:c++latest možnost kompilátoru (nebo /std:c++20 začněte v Visual Studio 2019 verze 16,11). Tuto možnost lze také nastavit na stránce vlastností nastavení projektu > jazyka C/C++ pomocí vlastnosti > .
  • nyní je k dispozici nová kolekce nástrojů s názvem sestavení C++ Přehledy . Další informace o oznámení najdete na blogu týmu C++.

co je nového v jazyce C++ v Visual Studio verze 16,3

shrnutí nových funkcí a oprav chyb ve verzi Visual Studio 16,3 najdete v článku novinky v Visual Studio 2019 verze 16,3.

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

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

  • přidali jsme tyto funkce c++ 20 Standard Library (k dispozici v rámci /std:c++latest nebo /std:c++20 od verze Visual Studio 2019 16,11):

  • Nové kontrolní podmínky C++ Core, včetně nových sad pravidel "pravidla výčtu" a dalších enum pravidel typu, a.

  • 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 kliknete na nástrojeMožnostiIntelliCode.

co je nového v jazyce C++ v Visual Studio verze 16,2

shrnutí nových funkcí a oprav chyb ve verzi Visual Studio 16,2 najdete v článku novinky v 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.

  • Aktualizovala se <charconv> Hlavička pro <charconv> základní převody řetězců 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řidání těchto funkcí C++ 20 Standard Library:

    • k dispozici v rámci /std:c++latest (nebo /std:c++20 od verze Visual Studio 2019 16,11):
      • P0020R6:
      • P0463R1: výčet ve formátu endian
      • P0482R6: typ pro znaky a řetězce znakové sady UTF-8
      • P0653R2: pro převod ukazatele na nezpracovaný ukazatel
    • k dispozici v rámci /std:c++17 a /std:c++latest (nebo /std:c++20 od verze Visual Studio 2019 16,11):
    • K dispozici bezpodmínečně:
  • 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 Časy a jsou v průměru dvakrát rychlejší a jsou /INCREMENTAL/DEBUG:FULL teď třikrát až šestkrát rychlejší.

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

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

kompilátor C++

  • Tyto funkce C++20 byly implementovány v kompilátoru C++, který je k dispozici v rámci (nebo od /std:c++latest verze Visual Studio /std:c++20 2019 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 vybrat konkrétní členy v agregované inicializaci, například pomocí 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í povolená při použití /std:c++20 nebo /std:c++latest . V režimu jazyka a ve výchozím režimu ( ) je možné nový analyzátor povolit pomocí ve /std:c++17/std:c++14 verzi Visual Studio /Zc:lambda 2019 verze 16.9 nebo novější (dříve dostupné jako od verze Visual Studio /experimental:newLambdaProcessor 2019 verze 16.3), /std:c++17 /Zc:lambda například .

Vylepšení standardní knihovny C++

  • Tyto funkce C++20 byly přidány do naší implementace standardní knihovny C++, která je dostupná v rámci /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 v úlohu Vývoj desktopových aplikací pomocí C++. Další informace najdete v tématu Vylepšený C++ IntelliCode se teď dodává s Visual Studio 2019.

IntelliCode používá vlastní rozsáhlé trénování a váš kontext kódu k tomu, abyste to, co budete s největší pravděpodobností používat, umístit na začátek seznamu dokončení. Často se tak nemusí v seznamu posouvat dolů. V jazyce C++ nabízí IntelliCode největší pomoc při používání oblíbených knihoven, jako je standardní knihovna.

Nové funkce IntelliCode (vlastní modely, podpora C++ a odvozování EditorConfig) jsou ve výchozím nastavení zakázané. Pokud je chcete povolit, přejděte na Nástroje Možnosti > 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í AI přicházejí do C++ prostřednictvím IntelliCode.

Vylepšení rychlých informací

  • Aplikace Rychlé informace respektuje sémantické zabarvení editoru. Obsahuje také nový odkaz Prohledat online, který bude hledat online dokumenty, ve které se dozvíte více o konstruktoru kódu, na který najedete myší. Odkaz, který poskytuje rychlé informace pro kód s červenouquiggled, vyhledá chybu online. Tímto způsobem nemusíte zprávu znovu zatypovat do prohlížeče. Další informace najdete v tématu Vylepšení rychlých informací v Visual Studio 2019:Zabarvení a Online vyhledávání.

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í direktivy, vcpkg lze nainstalovat, a automatické dokončování dostupných balíčků #include pro direktivu CMake. find_package

  • Byla revidována obecná stránka vlastností pro projekty C++. Některé možnosti jsou teď uvedené na nové stránce Upřesnit. Stránka Upřesnit obsahuje také nové vlastnosti pro vaši preferovanou architekturu sady nástrojů, knihovny ladění, podverii sady nástrojů MSVC a sestavení Unity (ju vyladění).

Podpora CMake

  • Aktualizovali jsme verzi CMake, která se dodává s 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 CMake Nastavení jsme přidali vylepšení, včetně podpory pro Subsystém Windows pro Linux (WSL) a konfigurací z existujících mezipamětí, změn výchozích kořenů sestavení a instalace a podpory proměnných prostředí v konfiguracích CMake pro Linux.

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

  • Integr jsme podporu úprav, sestavování a ladění projektů CMake pomocí Clang/LLVM. Další informace najdete v tématu Podpora Clang/LLVM v 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 více platforem.

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

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

kompilátor C++

  • Vylepšená podpora pro funkce C++17 a opravy správnosti a experimentální podpora pro funkce C++20, jako jsou moduly a koruiny. Podrobné informace najdete v tématu Vylepšení shody C++ v Visual Studio 2019.

  • Možnost teď obsahuje funkce C++20, které nejsou nutně úplné, včetně počáteční podpory operátoru /std:c++latest C++20 ("kosmická kosmická lodi") pro <=> trojrozměrné porovnání.

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

  • Jak MSVC začne implementace funkcí ze standardního konceptu C++20 pod příznakem , je nyní nekompatibilní s /std:c++latest/std:c++latest/clr (všechny příchutě), /ZW a /Gm . V Visual Studio 2019 použijte režimy nebo při /std:c++17/std:c++14 kompilaci s , nebo /clr/ZW/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 verze

Vylepšená analýza pro poskytování pomoci při zmírnění rizika pro /Qspectre Spectre Variant 1/Qspectre Další informace najdete v tématu Omezení rizik spectre v MSVC.

Vylepšení standardní knihovny C++

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

  • Clang-Format byla použita pro hlavičky standardní knihovny jazyka C++, aby byla lépe čitelnost.

  • Protože Visual Studio podporuje Pouze můj kód pro C++, standardní knihovna už nemusí poskytovat vlastní stroje pro a dosáhnout std::functionstd::visit stejného efektu. Odebrání těchto strojů nemá do značné míry žádné účinky viditelné pro uživatele. Jedinou výjimkou je, že kompilátor už nebude vytvářet diagnostiku, která indikuje problémy na 15732480 nebo 16707566 <type_traits> nebo <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á V/V soubory, a času propojení ve slučování a vytváření typů PDB.

  • Byla přidána základní podpora vektorizace OpenMP SIMD. Můžete ji povolit pomocí nového přepínače kompilátoru /openmp:experimental . Tato možnost umožňuje potenciálně vektorizovat smyčky #pragma omp simd anotované pomocí . Vektorizace není zaručena a ve smyčkách s poznámkami, které nejsou vektorizované, se zobrazí upozornění. Nejsou podporovány žádné klauzule SIMD. Ignorují se a zobrazí se upozornění.

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

  • Přidali jsme podporu vnitřních funkcí knihovny SVML (Short Vector Math Library). Tyto funkce počítají 128bitové, 256bitové nebo 512bitové vektorové ekvivalenty. Přidali jsme je, aby podporovaly ruční vektorizaci smyček pomocí volání matematických funkcí knihovny a určitý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:

    • Skládání konstant a aritmetické zjednodušení pro výrazy využívající vnitřní vektory SIMD pro tvary s plovoucí desetinnou čárkou i celočíselné tvary.

    • Výkonnější analýza pro extrahování informací z toku řízení (příkazy if/else/switch) pro odebrání větví, u které se vždy ukázalo, že jsou pravdivé nebo nepravdivé.

    • Vylepšené zrušení registrace memset pro použití instrukcí vektoru SSE2

    • Vylepšené odebrání nepoužitelných kopií struktur a tříd, zejména pro programy C++, které projdou hodnotou .

    • Vylepšili jsme optimalizaci kódu memmove pomocí , jako je nebo a std::copystd::vectorstd::string construction.

  • Optimalizovaný fyzický návrh standardní knihovny, aby se zabránilo kompilaci částí standardní knihovny, které nejsou zahrnuty přímo. Tato změna vyjmout č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ý používá std::out_of_range , teď může potřebovat 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í, nebo komponenty <stdexcept><ostream> platí náklady na propustnost za jejich kompilaci.

  • if constexpr byla použita na více místech standardní knihovny pro lepší propustnost a sníženou 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ě využívá ke if constexpr zkrácení doby kompilace, a to i v režimu C++14.

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

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

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

  • Standardní knihovna teď používá k dosažení správnosti 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 prostřednictvím standardní knihovny v ovlivněných umístěních, se teď místo našeho opětovného vyvolání zobrazují jako vyvolané z původního webu throw. Ne všechny standardní bloky catch knihovny byly eliminovány. Očekáváme, že počet bloků catch bude v pozdějších verzích MSVC.

  • Neoptimální codegen způsobený podmíněným vyvoláním uvnitř funkce byl opraven tím, že se std::bitsetnoexcept vyvolala cesta, která vyvolá výjimku.

  • Rodina std::list a std::unordered_* používají iterátory bez ladění interně na více místech.

  • Změnilo se několik členů, aby se tam, kde je to možné, opakovaně používat uzly seznamu, místo aby je uděloval a std::list přiděloval znovu. Například pokud má objekt , který už má velikost 3, volání teď přepíše hodnoty v prvních třech uzlech seznamu a přidělí jeden nový uzel seznamu s hodnotou list<int>assign(4, 1729)int 1729.

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

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

  • Vylepšení, std::variant aby byla přívětivější k optimalizátoru, což vede k lepšímu vygenerování kódu Podtržení kódu je teď mnohem lepší díky std::visit .

C++ IDE

Live Share podpory jazyka C++

Live Share teď podporuje C++, což vývojářům používajícím Visual Studio nebo Visual Studio Code umožňuje spolupracovat v reálném čase. Další informace najdete v tématu Oznámení Live Share pro C++: Real-Time sdílení a spolupráce

Šablona IntelliSense

Panel šablon teď místo modálního okna používá uživatelské rozhraní náhledu okna, podporuje vnořené šablony a předem vyplní všechny výchozí argumenty do okna Náhled. Další informace najdete v tématu Vylepšení technologie IntelliSense pro šablony 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. Přehodí se Project nová funkce do vyhledávacího filtrovatelného prostředí.

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

Upravili jsme několik názvů a popisů šablon projektů tak, aby odpovídaly aktualizovanému dialogovému Project nový projekt.

Různá vylepšení produktivity

Visual Studio 2019 obsahuje následující funkce, které usnadňují a intuitivnější kódování:

  • Rychlé opravy pro:
    • Přidání chybějícího #include
    • NULL na nullptr
    • Přidání chybějícího středníku
    • Řešení potíží s chybějícím oborem názvů nebo oborem
    • Nahrazení chybně dereference operandů ( do a *& na &* )
  • Rychlé informace pro blok po najetí myší na uzavírací složenou závorku
  • Náhled hlavičky / souboru kódu
  • Při otevření souboru #include přejděte k definici.

Další informace najdete v tématu Vylepšení produktivity C++ v Visual Studio 2019 Preview 2.

Podpora CMake

  • Podpora pro CMake 3.14

  • Visual Studio teď můžete otevřít existující mezipaměti CMake vygenerované externími nástroji, jako je CMakeGUI, přizpůsobené systémy pro metasestavování nebo skripty sestavení, které cmake.exe samotné.

  • Vylepšený výkon technologie IntelliSense.

  • Nový editor nastavení nabízí alternativu k ruční úpravě souboru CMakeSettings.json a poskytuje 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 neshodná architektura nebo nekompatibilní nastavení generátoru CMake, zobrazují v editoru JSONquiggles a v seznamu chyb chyby.

  • 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 pro projekty CMake.

  • Jasnější zprávy o sestavení a konfiguraci begin a end pro projekty CMake a podporu Visual Studio uživatelského rozhraní průběh sestavení. Kromě toho je teď v možnostech nástrojů k dispozici nastavení podrobností CMake, které umožňuje přizpůsobit úroveň podrobností sestav a konfiguračních zpráv CMake v okno Výstup.

  • Nastavení cmakeToolchain se teď podporuje v souboru CMakeSettings.json, aby bylo možné určit skupiny 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 v úlohu Vývoj desktopových aplikací pomocí jazyka C++. IncrediBuild Build Monitor je plně integrovaný do integrovaného vývojového Visual Studio Ide. Další informace najdete v tématu Vizualizace sestavení pomocí nástroje IncrediBuild Build Monitor a Visual Studio 2019.

Ladění

  • V případě aplikací C++ spuštěných Windows se soubory PDB nyní načítá v samostatném 64bitovém procesu. Tato změna řeší rozsah chyb způsobených tím, že ladicímu programu dochází paměť. Například při ladění aplikací, které obsahují velký počet modulů a souborů PDB.

  • Vyhledávání je povolené v oknech Sledovat,Automatické hodnotya Místní hodnoty.

Windows desktopových aplikací pomocí C++

  • Tito průvodci C++ ATL/MFC už nejsou k dispozici:

    • Průvodce komponentami ATL COM+ 1.0
    • Průvodce komponentami ATL Active Server Pages
    • Průvodce zprostředkovatelem ATL OLE DB
    • Průvodce stránkou vlastností ATL
    • Průvodce příjemcem ATL OLE DB
    • Mfc – příjemce ODBC
    • Třída MFC z technologie ActiveX ovládacího prvku
    • Třída MFC z knihovny typů.

    Ukázkový kód pro tyto technologie je archivován v Microsoft Docs a v úložišti GitHub VCSamples.

  • Sada Windows 8.1 SDK (Software Development Kit) už není v instalačním programu Visual Studio k dispozici. Doporučujeme upgradovat projekty C++ na nejnovější verzi 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 knihovnami kompilátoru MSVC na úrovni sady VS 2017 je stále podporováno a lze ho nainstalovat prostřednictvím & možnosti Jednotlivé součásti.

  • Naše dokumentace aktivně odrazuje od používání slučovacích modulů k nasazení modulu Runtime Visual C++. V této verzi se pustíme do dalších kroků, kdy naše MSM označme jako zastaralé. Zvažte migraci centrálního nasazení VCRuntime z balíčků MSM na balíček opětovné distribuce.

Vývoj mobilních aplikací v jazyce 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. Pomocí sady MSVC nástrojů pro plnou shodu standardů C++ s a nebo sady nástrojů /permissive-/std:c++17 Clang/LLVM pro Windows.

Analýza kódu

Testování jednotek

Šablona spravovaného testovacího projektu C++ už není dostupná. Ve stávajících projektech můžete dál používat rozhraní managed C++ Test. 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 spravovanou šablonu testovacího Project jazyka C#.