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++20režim kompilátoru. Dříve byly funkce C++20 dostupné pouze v/std:c++latestrež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++20v 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:llvmje teď k dispozici na x86 a ARM64 kromě x64Adresář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:strictC++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
/externaldo 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.
-
Naše podpora sanitizéru adres v Windows není experimentální režim a dosáhla obecné dostupnosti.
Rozšířili
RtlAllocateHeapjsme podporu, opravili jsme problém s kompatibilitou seRtlCreateHeapzachytávači a při vytváření fondůRtlAllocateHeapspustitelných pamětí.Přidali jsme podporu pro
GlobalAllocstaršíLocalAllocverzi 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:llvmCL. Tím se v paralelních smyčkách přidá podpora klauzule pro oddíly a proměnné indexulastprivate#pragma ompbezforznaménka. Přepínač/openmp:llvmje 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_memmoveconstexprBylo 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=addresspouze 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++20verze 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.
Mezi další vylepšení STL patří plná podpora
std::atomic_refpro ,std::atomic_refa , optimalizace pro astd::execution::unseqstd::reverse_copydalší.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:FULLzvýš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-Tidypro 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 seto_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++latestmožnost kompilátoru (nebo/std:c++20zač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 > .
- C++ 17: implementovala
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::vectornyní filtruje metody, jako napříkladpush_back.přidali jsme tyto funkce c++ 20 Standard Library (k dispozici v rámci
/std:c++latestnebo/std:c++20od verze Visual Studio 2019 16,11):Nové kontrolní podmínky C++ Core, včetně nových sad pravidel "pravidla výčtu" a dalších
enumpravidel 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 čárkou
to_chars()pro přesnostichars_format::fixedachars_format::scientific(chars_format::general precisionje jediná část, která ještě nebyla implementována). - Proběhla optimalizace pro nejkratší zápis
chars_format::fixed.
- Byla přidána přetížení s plovoucí desetinnou čárkou
Přidání těchto funkcí C++ 20 Standard Library:
- k dispozici v rámci
/std:c++latest(nebo/std:c++20od verze Visual Studio 2019 16,11): - k dispozici v rámci
/std:c++17a/std:c++latest(nebo/std:c++20od verze Visual Studio 2019 16,11):- P0600R1: v knihovně
- K dispozici bezpodmínečně:
- k dispozici v rámci
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:FULLteď 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++latestverze Visual Studio/std:c++202019 verze 16.11):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++20nebo/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++14verzi Visual Studio/Zc:lambda2019 verze 16.9 nebo novější (dříve dostupné jako od verze Visual Studio/experimental:newLambdaProcessor2019 verze 16.3),/std:c++17 /Zc:lambdanapří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_withaends_withprobasic_stringabasic_string_view.containspro asociativní kontejnery.remove,remove_ifauniqueprolistaforward_listteď vracísize_type.- Přidali jsme
shift_leftashift_rightk<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ů
#includepro direktivu CMake.find_packageByla 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.txtsouborů.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
V linuxových projektech a projektech CMake pro více platforem teď podporujeme AddressSanitizer (ASan). Další informace najdete v tématu AddressSanitizer (ASan) pro linuxovou úlohu v Visual Studio 2019.
Integrvali jsme podporu Visual Studio jazyka C++ s knihovnou WSL (Subsystém Windows pro Linux). Teď můžete místní instalaci Subsystém Windows pro Linux (WSL) s C++ nativně v Visual Studio bez další konfigurace nebo připojení SSH. Další informace najdete v tématu C++ s Visual Studio 2019 a Subsystém Windows pro Linux (WSL).
analýza kódu
- Byly přidány nové rychlé opravy pro neinicializované kontroly proměnných. Code Analysis upozornění C6001: > Použití neinicializované proměnné paměti a > jsou k dispozici v nabídce žárovky na příslušných řádcích. Ve výchozím nastavení jsou povolené v sadách pravidel Microsoft Native Minimum a C++ Core Check typech pravidel. Další informace naleznete v části New code analysis quick fixes for uninitialized memory (C6001) and use before init (C26494) warnings.
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++latestC++20 ("kosmická kosmická lodi") pro<=>trojrozměrné porovnání.Přepínač kompilátoru C++
/Gmje teď zastaralý. Zvažte zakázání/Gmpř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í/Gmza 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ě),/ZWa/Gm. V Visual Studio 2019 použijte režimy nebo při/std:c++17/std:c++14kompilaci 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::visitstejné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 simdanotované 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
/Ob3agresivnější verzí/Ob2./O2(optimalizovat binární soubor pro rychlost) stále/Ob2implikuje 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
memmovepomocí , jako je nebo astd::copystd::vectorstd::stringconstruction.
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#includedirektivy 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 constexprbyla 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 constexprzkrá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_beginthreadexvolatelný objekt. Dřívestd::threadse mezi a zadaný_beginthreadexvolatelný objekt vložilo šest funkcí. Toto číslo bylo sníženo pouze na tři, z nichž dva jsou pouzestd::invoke. Tato změna také řeší chybu zakrytí časování, kdy konstruktor přestane reagovat, pokud se systémové hodiny změnily přesně vstd::threadstd::threadokamžiku vytvoření.Opravili jsme regresi výkonu
std::hashv , kterou jsme zavedli při implementacistd::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::bitsetnoexceptvyvolala cesta, která vyvolá výjimku.Rodina
std::listastd::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::listpř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 hodnotoulist<int>assign(4, 1729)int1729.Všechna standardní volání knihovny byla
erase(begin(), end())změněna naclear().std::vectornyní v určitých případech inicializuje a vymaže prvky efektivněji.Vylepšení,
std::variantaby 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íkystd::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 NULLnanullptr- 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&*)
- Přidání chybějícího
- 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
#includepř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 installse 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í
cmakeToolchainse 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
Analýza kódu se teď spouští automaticky na pozadí. Upozornění se v editoru během psaní podtrhávají zelenou vlnovkou. Další informace najdete v tématu Analýza kódu v editoru v Visual Studio 2019 Preview 2.
Nová experimentální pravidla ConcurrencyCheck pro známé standardní typy knihoven z
<mutex>hlavičky . Další informace najdete v tématu Souběžnost Code Analysis v Visual Studio 2019.Aktualizovaná částečná implementace kontroly profilu životnosti, která detekuje nesnížené ukazatele a odkazy. Další informace najdete v tématu Aktualizace profilu životnosti ve verzi Visual Studio 2019 Preview 2.
Další kontroly související s korutinou, včetně C26138,C26810,C26811a experimentálního pravidla C26800. Další informace najdete v tématu New Code Analysis Checks in Visual Studio 2019: use-after-move and coroutine.
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#.