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.
-
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 sRtlCreateHeap
kompatibilitou aRtlAllocateHeap
průsečíky při vytváření spustitelných fondů paměti.Byla přidána podpora pro starší verze
GlobalAlloc
aLocalAlloc
řadu funkcí paměti. Tyto průsečíky můžete povolit nastavením příznakuASAN_OPTIONS=windows_hook_legacy_allocators=true
prostř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:llvm
CL . Tím se přidá podpora klauzule prolastprivate
#pragma omp
oddíly a proměnné indexu bez znaménka v paralelníchfor
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:
Byla vylepšena stabilita a funkčnost poskytování importovaných modulů a dokončování jednotek hlaviček v IntelliSense.
Přidání definice jazyka Go-to-definition pro importy modulů, podpora indexování pro
export {...}
moduly a přesnější odkazy na moduly se stejným názvem.Vylepšili jsme shodu jazyka C++ IntelliSense přidáním podpory kopírování dočasné inicializace v přímé inicializaci
__builtin_memcpy
odkazu a__builtin_memmove
oprava nekonzistencí meziconstexpr
funkcemi aconsteval
funkcemi, dočasně rozšířených životností ve konstantních výrazech a podobných typů a odkazových vazbách.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á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 jakoconstexpr
std::vector
astd::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_ref
std::midpoint
std::lerp
std::execution::unseq
optimalizace a optimalizace prostd::reverse_copy
a 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++.
- C++17: Implementovali
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
jakopush_back
je .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: Oprava
operator>>(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
- P0487R1: Oprava
Nové kontroly obecných zásad jazyka C++, včetně nové sady pravidel výčtu a dalších
const
enum
pravidel 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 čárkou
to_chars()
pro přesnostichars_format::fixed
achars_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
.
- Byla přidána přetížení s plovoucí desetinnou čárkou
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:/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ě
- P0600R1:
- 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
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
aends_with
probasic_string
abasic_string_view
.contains
pro asociativní kontejnery.remove
,remove_if
aunique
prolist
aforward_list
teď vracísize_type
.- Přidali jsme
shift_left
ashift_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 CMakefind_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
V linuxových a multiplatformních projektech CMake teď podporujeme AddressSanitizer (ASan ). Další informace najdete v tématu AddressSanitizer (ASan) pro linuxovou úlohu v sadě Visual Studio 2019.
Integrovali jsme podporu sady Visual Studio pro použití jazyka C++ s Subsystém Windows pro Linux (WSL). Teď můžete použít místní instalaci Subsystém Windows pro Linux (WSL) s C++ nativně v sadě Visual Studio bez další konfigurace nebo připojení SSH. Další informace najdete v jazyce C++ se sadou Visual Studio 2019 a Subsystém Windows pro Linux (WSL).
analýza kódu
- Byly přidány nové rychlé opravy neinicializovaných kontrol proměnných. Upozornění analýzy kódu C6001: Použití neinicializované paměti
<variable>
a VAR_USE_BEFORE_INIT C26494 jsou k dispozici v nabídce žárovky na příslušných řádcích. Jsou ve výchozím nastavení povoleny v sadě pravidel Microsoft Native Minimum a V++ Core Check Type rulesets( v uvedeném pořadí). Další informace naleznete v tématu Nové rychlé opravy analýzy kódu pro neinicializovanou paměť (C6001) a použití před inicializačními upozorněními (C26494).
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/Gm
vyř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ě)/ZW
a/Gm
. V sadě Visual Studio 2019 používejte/std:c++17
nebo/std:c++14
režimy při kompilaci pomocí/clr
,/ZW
nebo/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:experimental
kompilá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č
/Ob3
pří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,
memmove
jakostd::copy
je například nebostd::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 pouzestd::invoke
. Tato změna také řeší nejasnou chybu časování, kdystd::thread
konstruktor přestane reagovat, pokud se systémové hodiny změnily přesně v okamžikustd::thread
vytvoření.Opravili jsme regresi
std::hash
výkonu, kterou jsme zavedli při implementacistd::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é, astd::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 klist<int>
tomu, že už má velikost 3, volání, kteréassign(4, 1729)
teď přepíšeint
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 naclear()
.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ší sstd::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
nanullptr
- 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*
)
- Přidat chybějící
- 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++17
nebo sady nástrojů 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 sadě Visual Studio 2019 Preview 2.
Nová experimentální pravidla ConcurrencyCheck pro dobře známé standardní typy knihoven z hlavičky
<mutex>
. Další informace najdete v tématu Analýza kódu souběžnosti v sadě Visual Studio 2019.Aktualizovaná částečná implementace kontroly profilu životnosti, která rozpozná sousledující ukazatele a odkazy. Další informace naleznete v tématu Aktualizace profilu životnosti v sadě Visual Studio 2019 Preview 2.
Další kontroly související s korutinou, včetně C26138, C26810, C26811 a experimentálního pravidla C26800. Další informace najdete v tématu Nové kontroly analýzy kódu v sadě Visual Studio 2019: použití po přesunutí a korutin.
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#.