Novinky v jazyce C++ v sadě Visual Studio 2017
Visual Studio 2017 přináší mnoho aktualizací a oprav prostředí C++. Opravili jsme víc než 250 chyb a nahlášených problémů v kompilátoru a nástrojích. Mnoho poslali zákazníci prostřednictvím nahlášení problému a v rámci odesílání názorůposkytli možnosti návrhů. Děkujeme vám, že hlásíte chyby!
další informace o tom, co je nového ve všech Visual Studio, najdete v článku novinky v Visual Studio 2017. informace o tom, co je nového v jazyce c++ v Visual Studio 2019, najdete v tématu co je nového v jazyce c++ v Visual Studio 2019. informace o tom, co je nového v jazyce C++ v Visual Studio 2015 a dřívějších verzích, najdete v článku Visual C++ novinky 2003 až 2015. Další informace o novinkách v dokumentaci jazyka C++ naleznete v tématu dokumentace k Microsoft C++: co je nového.
kompilátor Visual Studio 2017 C++
Vylepšení shody C++
V této verzi jsme aktualizovali kompilátor C++ a standardní knihovnu s rozšířenou podporou pro funkce C++ 11 a C++ 14. Zahrnuje taky předběžnou podporu pro některé funkce očekávané ve standardu C++ 17. podrobné informace naleznete v tématu vylepšení shody C++ v Visual Studio 2017.
Visual Studio 2017 verze 15.5
Kompilátor podporuje přibližně 75% funkcí, které jsou v C++ 17 novinkou, včetně strukturovaných vazeb, constexpr výrazů lambda, if constexpr , vložených proměnných, výrazů skládání a přidávání noexcept do systému typů. Tyto funkce jsou k dispozici v rámci /std:c++17 Možnosti. další informace najdete v tématu vylepšení shody C++ v Visual Studio 2017
Visual Studio 2017 verze 15.7
sada nástrojů kompilátoru MSVC v Visual Studio verze 15,7 teď vyhovuje standardu C++. další informace naleznete v tématu oznamujeme: MSVC odpovídá standardu C++ a souladu s jazykem Microsoft C/C++.
verze Visual Studio 2017 15,8
/experimental:preprocessorpřepínač kompilátoru umožňuje nové experimentální MSVC preprocesor, který bude nakonec odpovídat všem použitelným normám jazyka C a C++. další informace naleznete v tématu MSVC nový přehled preprocesoru.
Nové možnosti kompilátoru
/permissive-: Povolte všechny možnosti kompilátoru s přísnými standardy a zakažte většinu rozšíření kompilátoru specifických pro společnost Microsoft (ale ne__declspec(dllimport), například). tato možnost je ve výchozím nastavení zapnutá v Visual Studio 2017 verze 15,5./permissive-Režim shody zahrnuje podporu vyhledávání názvů se dvěma fázemi. Další informace najdete v tématu vylepšení shody C++ v Visual Studio./diagnostics: Povoluje zobrazení diagnostické chyby nebo místa upozornění třemi různými způsoby: pouze číslo řádku, číslo řádku a sloupec nebo číslo řádku a sloupec se blikajícím kurzorem pod problematickým řádkem kódu./debug:fastlink: můžete povolit až 30% rychlejších přírůstkových propojení (vs. Visual Studio 2015) tak, že všechny informace o ladění nezkopírujete do souboru PDB. Soubor PDB místo toho odkazuje na ladicí informace pro objekty a soubory knihovny použité k vytvoření spustitelného souboru. podívejte se na rychlejší cyklus sestavení v jazyce c++ v VS "15" s a Recommendations urychlit sestavení v jazyce c++ v Visual Studio.Visual Studio 2017 umožňuje použití
/sdls/await. Odebrali jsme/RTComezení s korutinami.
Visual Studio 2017 verze 15.3
a
/std:c++latest: tyto možnosti kompilátoru vám umožňují vyjádřit výslovný souhlas s konkrétní verzí programovacího jazyka ISO C++ v projektu. Většina nových konceptů nových funkcí je chráněná/std:c++latestmožností./std:c++17povoluje sadu funkcí C++ 17 implementovaných kompilátorem. Tato možnost zakazuje podporu kompilátoru a standardní knihovny pro funkce po C++ 17: ty, které se změnily nebo novinují v novějších verzích pracovní verze a aktualizace chyb standardu C++. Pokud chcete tyto funkce povolit, použijte/std:c++latest.
CodeGen, zabezpečení, diagnostika a správa verzí
Tato vydaná verze přináší několik vylepšení optimalizace, generování kódu, správu verzí sady nástrojů a diagnostiku. Mezi důležitá vylepšení patří:
- Vylepšené generování kódu smyček: Podpora automatické vektorizace dělení konstantních celých čísel, lepší identifikace vzorů memset
- Vylepšené zabezpečení kódu: Vylepšená emise diagnostiky kompilátoru přetečení vyrovnávací paměti a
/guard:cfteď chrání příkazy Switch, které generují tabulky skoků. - Správa verzí: hodnota předdefinovaného makra preprocesoru _MSC_VER nyní aktualizována při každé Visual C++ aktualizace sady nástrojů. Další informace naleznete v tématu Visual C++ verze kompilátoru.
- Nové rozložení sady nástrojů: kompilátor a související nástroje sestavení mají na svém vývojovém počítači nové umístění a strukturu adresářů. Nové rozložení umožňuje souběžnou instalaci více verzí kompilátoru. další informace naleznete v tématu rozložení nástrojů kompilátoru v Visual Studio 2017.
- Vylepšená diagnostika: okno výstup nyní zobrazuje sloupec, ve kterém došlo k chybě. Další informace naleznete v tématu vylepšení diagnostiky kompilátoru C++ v sadě vs "15" Preview 5.
- Při použití korutiny je možné odebrat experimentální klíčové slovo (k dispozici v Možnosti). Váš kód by měl být aktualizován, aby bylo možné použít
co_yieldmísto toho. Další informace najdete v tématu klíčové slovo, které se máco_yieldv vs 2017.
Visual Studio 2017 verze 15.3
Další vylepšení diagnostiky v kompilátoru. další informace najdete v tématu vylepšení diagnostiky v Visual Studio 2017 15.3.0.
Visual Studio 2017 verze 15.5
Visual C++ výkon modulu runtime dál vylepšuje prostřednictvím lepší kvality vygenerovaného kódu. Nyní můžete znovu kompilovat kód a aplikace je spouštěna rychleji. Některé optimalizace kompilátoru jsou zcela nové, například vektory podmíněných skalárních úložišť, kombinování volání sin(x) a cos(x) nové sincos(x) a eliminují redundantní pokyny z Optimalizátoru SSA. Další optimalizace kompilátoru jsou vylepšení stávající funkce, jako například: vektorizace heuristiky pro podmíněné výrazy, lepší optimalizace smyček a minimální CodeGen na maximum. Linker má novou a rychlejší /OPT:ICF implementaci, což může způsobit až 9% urychleníí času propojení a další opravy výkonu v přírůstkovém propojování. Další informace najdete v tématu /opt (optimalizace) a /incremental (propojování přírůstkově).
Kompilátor Microsoft C++ podporuje Intel AVX-512. Obsahuje pokyny pro délku vektoru, které přinášejí nové funkce v AVX-512 až 128 bitů a 256 bitů v registru.
/Zc:noexceptTypes-Možnost lze použít pro návrat k verzi c++ 14, noexcept zatímco obecně používá režim c++ 17. Tato možnost umožňuje aktualizovat zdrojový kód tak, aby odpovídal C++ 17 bez nutnosti přepsat celý throw() kód současně. Další informace naleznete v tématu odstranění specifikace dynamické výjimky a s výjimkou.
Visual Studio 2017 verze 15.7
- Nový přepínač kompilátoru /Qspectre , který se může zmírnit proti spekulativním útokům na straně vykonání kanálu. Další informace najdete v tématu Spectre zmírnění hrozeb v MSVC.
- Nové diagnostické upozornění pro zmírnění rizik Spectre další informace najdete v tématu diagnostika Spectre v Visual Studio 2017 verze 15,7 Preview 4.
- Nová hodnota parametru/Zc,
/Zc:__cplusplusumožňuje správné vytváření sestav standardní podpory jazyka C++. Například když je přepínač nastaven a kompilátor je v režimu, hodnota se/std:c++17rozšíří na201703L. další informace najdete v tématu MSVC nyní správně hlásí __cplusplus.
Standardní knihovna C++
Vylepšení správnosti
Visual Studio 2017 RTM (verze 15,0)
- Menší
basic_string_ITERATOR_DEBUG_LEVEL != 0vylepšení diagnostiky. Když je v řetězcovém strojovém stroji Trip, bude nyní hlásit konkrétní chování, které způsobilo cestu. Například místo zprávy oznamující, že iterátor řetězce nejde přesměrovat, se teď zobrazí zpráva s oznámením, že iterátor řetězce nejde přesměrovat, protože je mimo rozsah (např. je to koncový iterátor). - Opravili jsme
std::promiseoperátor přiřazení přesunutí, který dřív mohl způsobit, že se kód trvale zablokuje. - Opravily se chyby kompilátoru s
atomic<T*>implicitním převodem naT*. pointer_traits<Ptr>nyní správně detekujePtr::rebind<U>.- Opravili chybějící
constkvalifikátor vmove_iteratoroperátoru odčítání. - Opravili jsme tiché chybné CodeGen pro stavová uživatelem definovaná přidělování, která vyžadují
propagate_on_container_copy_assignmentapropagate_on_container_move_assignment. atomic<T>Nyní je tolerována přetíženíoperator&().- Mírně Vylepšená Diagnostika kompilátoru pro nesprávná
bind()volání.
v Visual Studio 2017 RTM je víc standardních vylepšení knihovny. Úplný seznam najdete v tématu věnovaném standardům blogu týmu C++ v sadě VS 2017 RTM o opravách standardní knihovny.
Visual Studio 2017 verze 15.3
- Knihovny standardních knihoven teď připnuté
max_size()nanumeric_limits<difference_type>::max()místomax()size_type. Tato změna zajišťuje, že výsledek zdistance()iterátorů z tohoto kontejneru je reprezentovatelné v návratovém typudistance(). - Pevná
auto_ptr<void>chybějící specializace for_each_n()Předtím, než jegenerate_n()search_n()argument Length celočíselný typ, se nepodařilo kompilovat algoritmy, a. Nyní se pokusí převést neintegrální délky na iterátorydifference_type.normal_distribution<float>už negeneruje upozornění uvnitř standardní knihovny o zúžení z Double na float.- Opravili jsme některé
basic_stringoperace, které senposmísto toho používalymax_size()při kontrole maximální velikosti přetečení. condition_variable::wait_for(lock, relative_time, predicate)by čekal na celou relativní dobu, pokud došlo k spuriousmu probuzení. Nyní čeká pouze na jeden interval relativního času.future::get()teď neověřujefuture, jak vyžaduje standard.iterator_traits<void *>používá se k tomu, že došlo k závažné chybě, protože se pokusila o vystavenívoid&. teď se z ní čistí prázdná struktura, aby se povolilo použitíiterator_traitsv podmínkách SFINAE typu "je iterátor".- Některá upozornění hlášená Clang
-Wsystem-headersbyla opravena. - Také opravená specifikace výjimky v deklaraci neodpovídá předchozí deklaraci hlášené pomocí Clang
-Wmicrosoft-exception-spec. - Také opravená upozornění na řazení mem-inicializátor-list hlášená Clang a C1XX.
- Neuspořádané kontejnery neměnily své funkce hash nebo predikáty, pokud byly samotné kontejnery prohozeny. Teď to dělají.
- Teď je označená spousta operací prohození kontejnerů
noexcept(protože naše standardní knihovna nikdy nechce vyvolat výjimku při zjišťovánípropagate_on_container_swapnedefinované podmínky nedefinovaného nedefinovaného přidělujícího modulu, který nerovná se). - Mnoho
vector<bool>operací je nyní označenonoexcept. - Standardní knihovna nyní vynutilí odpovídajícího přidělování
value_type(v režimu c++ 17) s řídicím šrafováním pro výslovný souhlas. - Opravili jsme některé podmínky, kdy by se v rámci sebe do rozsahu vložení do sebe
basic_stringzaznamenal obsah řetězců. (Poznámka: pole pro vložení do rozsahu je stále zakázáno standardem.) basic_string::shrink_to_fit()už není ovlivněný přidělovánímpropagate_on_container_swap.std::decaynyní zpracovává typy funkcí Abominable, tj. typy funkcí, které jsou kvalifikovány na základě CV, nebo obojí.- Změněné direktivy include pro použití správných citlivostí velkých a malých písmen a lomítka, zlepšení přenositelnosti.
- Pevné upozornění C4061 "enumerátor 'enumerátor' v přepínačivýčtu ' enum ' neníexplicitně zpracováno jmenovkou Case". Toto upozornění je vypnuto – ve výchozím nastavení a bylo opraveno jako výjimka pro obecné zásady standardní knihovny pro upozornění. (Standardní knihovna je
/W4čistá, ale nepokusí se/Wallvyčistit. Mnohé z nestandardních upozornění jsou většinou nenáročné na vysokou úroveň a nejsou určeny pro pravidelné používání.) - Vylepšené
std::listkontroly ladění. Seznam iterátorů nyní kontrolujeoperator->()alist::unique()nyní označuje iterátory jako neověřené. - Pevná použití metaprogramování šablonou pro přidělování v
tuple.
Visual Studio 2017 verze 15.5
std::partitionnyníNnamísto času volá predikátN + 1, jak vyžaduje standard.- Pokusy o zamezení Magic static ve verzi 15,3 byly opraveny ve verzi 15,5.
std::atomic<T>již není nutnéTpoužívat výchozí constructible.- Algoritmy haldy, které přijímají logaritmické časy, se chovají jinak, když je povoleno ladění iterátoru. Již nedělají lineární časový kontrolní výraz, že vstup je ve skutečnosti halda.
__declspec(allocator)je teď chráněná jenom pro C1XX, aby se zabránilo varováním z Clang, které nerozumí tomuto declspec.basic_string::nposje nyní k dispozici jako časová konstanta kompilace.std::allocatorv režimu C++ 17 nyní správně zpracovává přidělení nadrovnaných typů, to znamená typy, jejichž zarovnání je větší nežmax_align_t, pokud není zakázáno/Zc:alignedNew-. Například vektory objektů se zarovnáním na 16 bajtů nebo 32 bajtů jsou nyní správně zarovnány pro instrukce SSE a AVX.
Vylepšení shody
- Přidali jsme <>< string_view > ,
apply(),make_from_tuple(). - Přidání < Optional > , < variant > ,
shared_ptr::weak_typea < cstdalign > . - Povoleno C++ 14
constexprvmin(initializer_list),max(initializer_list),,minmax(initializer_list)amin_element()max_element(), aminmax_element().
Další informace najdete v tématu věnovaném souladu s jazykem Microsoft C/C++.
Visual Studio 2017 verze 15.3
- Bylo implementováno několik dalších funkcí C++ 17. Další informace najdete v tabulce pro shodu jazyka Microsoft C++.
- Implementovaná P0602R0a "variant a Optional by měla rozšířit triviální možnost kopírování/přesunutí".
- Standardní knihovna nyní umožňuje úředně tolerovat dynamickou RTTI zakázanou prostřednictvím možnosti /gr- . Obě
dynamic_pointer_cast()irethrow_if_nested()dynamic_castz nich vyžadují, aby ji standardní knihovna nyní vyznačuje jako=deletev rámci/GR-. - I v případě, že byl dynamický RTTI zakázán prostřednictvím
/GR-, je "statický RTTI" ve formětypeid(SomeType)stále k dispozici a má několik standardních komponent knihovny. Standardní knihovna teď podporuje i vypnutí této funkce prostřednictvím/D_HAS_STATIC_RTTI=0. Tento příznak také zakážestd::any,target()atarget_type()členské funkce a členskéstd::functionget_deleter()funkcestd::shared_ptrstd::weak_ptrtypu a. - Standardní knihovna nyní používá C++ 14
constexprnepodmíněný, namísto podmíněně definovaných maker. - Standardní knihovna nyní používá šablony aliasu interně.
- Standardní knihovna nyní používá
nullptrinterně místonullptr_t{}. (Bylo vyhubeno vnitřní použití hodnoty NULL. Vnitřní použití 0-as-null se vyčistí postupně.) - Standardní knihovna nyní používá
std::move()interně místo stylistických nepoužívánístd::forward(). - Změněno
static_assert(false, "message")na#error message. Tato změna vylepšuje diagnostiku kompilátoru#error, protože okamžitě zastaví kompilaci. - Standardní knihovna již neoznačuje funkce jako
__declspec(dllimport). Technologie moderního linkeru už to nevyžaduje. - Extrahována SFINAE k výchozím argumentům šablony, což snižuje množství zbytečných hodnot v porovnání s návratovými typy a typy argumentů funkce.
- Kontroly ladění v < náhodně: > místo interní funkce
_Rng_abort(), která se volá na, použijte běžné strojní zařízení standardní knihovnyfputs()stderr. Implementace této funkce byla zachovaná kvůli binární kompatibilitě. Odebereme ho v další binární a nekompatibilní verzi standardní knihovny.
Visual Studio 2017 verze 15.5
- Některé funkce standardní knihovny byly přidány, zastaralé nebo odebrané podle standardu C++ 17. Další informace najdete v tématu vylepšení shody C++ v Visual Studio.
- Experimentální podpora těchto paralelních algoritmů:
all_ofany_offor_eachfor_each_nnone_ofreducereplacereplace_ifsort
- Signatury pro následující paralelní algoritmy jsou přidány, ale nejsou v tuto chvíli paralelní. Profilace ukázala, že v algoritmech virtuálního nejsou žádné výhody, které přesouvají nebo permute – prvky:
copycopy_nfillfill_nmovereversereverse_copyrotaterotate_copyswap_ranges
Visual Studio 2017 verze 15.6
<memory_resource>- Základy knihovny v1
- Odstraňuje se
polymorphic_allocatorpřiřazení - Vylepšení srážek argumentu šablony třídy
Visual Studio 2017 verze 15.7
- Podpora paralelních algoritmů už není experimentální.
- Nová implementace
<filesystem> - Základní převody řetězců (částečné)
std::launder()std::bytehypot(x,y,z)- Předcházení zbytečným Decay
- Matematické speciální funkce
constexpr char_traits- Průvodci odpočty pro standardní knihovnu
Další informace najdete v tématu věnovaném souladu s jazykem Microsoft C/C++.
Opravy výkonu a propustnosti
- Převedená
basic_string::find(char)přetížení se volají jenomtraits::findjednou. Dříve byla implementována jako obecná řetězcová hledání pro řetězec o délce 1. basic_string::operator==nyní před porovnáváním obsahu řetězců kontroluje velikost řetězce.- Bylo odebráno propojení ovládacího prvku v
basic_string, což bylo pro Optimalizátor kompilátoru obtížné analyzovat. U všech krátkých řetězců voláníreservestále obsahuje nenulové náklady, aby nedošlo k žádné akci. std::vectorse převedlo na správnost a výkon: vytváření aliasů během operací vložení a emplace je teď správně zpracované podle požadavků standardu. Záruka silné výjimky je teď k dispozici v případě, že je to vyžadováno standardem Viamove_if_noexcept()a jinou logikou a vkládat a emplace méně operací elementu.- Standardní knihovna C++ teď nevylučuje přesměrování na ozdobné ukazatele s hodnotou null.
- Vylepšený
weak_ptr::lock()výkon. - Pro zvýšení propustnosti kompilátoru teď hlavičky standardní knihovny C++ nepoužívejte deklarace pro nepotřebné vnitřní funkce kompilátoru.
- Vylepšený výkon
std::stringastd::wstringPřesun konstruktorů více než třikrát.
Visual Studio 2017 verze 15.3
- Spolupracovaly s interakcemi
noexcept, které zabraňují vkládánístd::atomicimplementace do funkcí, které používají strukturované zpracování výjimek (SEH). - Byla změněna interní funkce standardní knihovny
_Deallocate()pro optimalizaci do menšího kódu, což umožňuje jejich inlineování na více místech. - Změněno
std::try_lock()na použití rozšíření balíčku namísto rekurze. - Vylepšený
std::lock()algoritmus pro zamezení zablokování pro použitílock()operací místo odstřeďování natry_lock()všech zámkech. - Byla povolena optimalizace pojmenované návratové hodnoty v
system_category::message(). conjunctionadisjunctionnyní vytváří instanciN + 1typů namísto2N + 2typů.std::functionjiž nevytváří instance pro každý typ, který je vyměnitelný, a zlepšuje propustnost a snižuje velikost objektu. obj v programech, které předají mnoho různých výrazů lambdastd::function.allocator_traits<std::allocator>obsahuje ručně vloženéstd::allocatoroperace, zmenšení velikosti kódu v kódu, který komunikujestd::allocatorallocator_traitspouze prostřednictvím pouze (to znamená ve většině kódu).- Rozhraní s minimálním přihlašováním v jazyce C++ 11 je nyní zpracováváno pomocí standardní knihovny volání
allocator_traitspřímo místo zabalení přidělujícího modulu do interní třídy_Wrap_alloc. Tato změna snižuje velikost kódu vygenerovaného pro podporu přidělování, zlepšuje v některých případech schopnost Optimalizátoru na základě knihoven standardních knihoven a poskytuje lepší možnosti ladění (jak je nyní zobrazen typ přidělování, nikoli_Wrap_alloc<your_allocator_type>v ladicím programu). - Odebrali jsme metaprogramování šablonou pro přizpůsobená nastavení
allocator::reference, která přidělování nemůžou přizpůsobit. (Alokátory můžou kontejnery používat ozdobné ukazatele, ale ne ozdobné odkazy.) - Front-end kompilátor byl výukou pro rozbalení iterátorů ladění v rámci smyček na základě rozsahu, což vylepšuje výkon sestavení ladění.
basic_stringInterní cesta zmenšení proshrink_to_fit()a jižreserve()není v cestě k přerozdělení operací, čímž se zmenší velikost kódu pro všechny ostatní členy.basic_stringInterní cesta zvětšení již není v cestě k umístěníshrink_to_fit().- Tyto
basic_stringoperace jsou nyní přizpůsobené nepřidělením rychlé cesty a přidělení funkcí pomalých cest. díky tomu je pravděpodobnější, že běžný případ bez opětovného přidělení nebude zapsaný do volajících. basic_stringMutace operace nyní vytvoří znovu přidělené vyrovnávací paměti v upřednostňovaném stavu, nikoli při změně velikosti. Například vložení na začátku řetězce nyní přesune obsah po vložení přesně jednou. Přesune se buď dolů, nebo do nově přidělené vyrovnávací paměti. V opačném případě se už nepřesouvá dvakrát v případě, že se napředuje nově přidělená vyrovnávací paměť a pak se dolů.- Operace, které volají standardní knihovnu jazyka C v < řetězci > nyní
errnomají v mezipaměti adresu pro odebrání opakované interakce s protokolem TLS. - Zjednodušená
is_pointerimplementace. - Změna výrazu založeného na funkci SFINAE na
structavoid_tna základě. - Standardní algoritmy knihovny nyní zabraňují iterátorům postincrementing.
- Pevná upozornění zkrácení při použití 32ho přidělování bitů na 64 systémech.
std::vectorpřiřazení přesunutí je teď v případě, že je to možné, v případě, že je to možné, i v případě, že je to možné, v opačném případě nePOCMAm
Visual Studio 2017 verze 15.5
basic_string<char16_t>nyní zahájí stejnoumemcmp,memcpya podobnou optimalizaci, která sebasic_string<wchar_t>zabývá.- omezení optimalizátoru, které zabránilo vloženému ukazatelům na funkce, je zveřejněné v Visual Studio 2015 Update 3, se kterými se pracovalo při obnovení výkonu
lower_bound(iter, iter, function pointer). - Režie pro ověření vstupu na základě pořadí ladění iterátoru u vstupů do
includes,set_difference,set_symmetric_differenceaset_unionbyla snížena pomocí rozbalení iterátorů před ověřením pořadí. std::inplace_mergenyní přeskočí nad prvky, které již jsou na pozici.- Sestavování již
std::random_devicenení konstrukce a poté zničenístd::string. std::equalastd::partitionměl průchod s optimalizací pro dělení na vlákna, který ukládá porovnání iterátoru.- Když
std::reverseje předána ukazatelům na triviální kopiiT, bude nyní zaslána do ručně určené vektorové implementace. std::fill,std::equalastd::lexicographical_comparebyly výukou, jak odesílat domemsetamemcmpprostd::byteagsl::byte(a další výčty typu char a třídy výčtu). Vzhledem kstd::copyis_trivially_copyabletomu, že je odeslání pomocí, nepotřebuje žádné změny.- Standardní knihovna už neobsahuje destruktory prázdných závorek, jejichž typy by měly být jenom triviální – zničitelné.
Jiné knihovny
Podpora open source knihovny
Vcpkg je open source nástroj pro příkazový řádek, který výrazně zjednodušuje proces získání a vytváření statických knihovny a knihoven DLL C++ v Visual Studio. Další informace najdete v tématu vcpkg.
CPPRest SDK 2.9.0
Visual Studio 2017 verze 15.5
Rozhraní Web API pro různé platformy pro C++ bylo CPPRestSDK aktualizované na verzi 2.9.0. Další informace najdete v tématu CppRestSDK 2.9.0 je k dispozici na GitHub.
ATL
Visual Studio 2017 verze 15.5
- Ještě další sada oprav shody názvů – vyhledávání
- Existující konstruktory přesunutí a operátory přiřazení přesunu jsou teď správně označené jako nevyvolání.
- Zrušení potlačení platných upozornění C4640 týkajícího o bezpečné inicializaci vlákna místních statických hodnot v atlstr. h
- Inicializace lokálních statických proměnných při použití ATL k sestavení knihovny DLL byla v sadě nástrojů XP automaticky vypnuta. Nyní to není.
/Zc:threadSafeInit-pokud nechcete inicializaci bezpečnou pro přístup z více vláken, můžete přidat do nastavení Project.
Modul runtime Visual C++
- New header "cfguard. h" pro kontrolní značky Flow Guard.
IDE Visual Studio 2017 C++
- Výkon při změně konfigurace je teď vyšší u nativních projektů C++ a mnohem vyšší u projektů C++/CLI. Když se konfigurace řešení aktivuje poprvé, bude se teď zrychlit a všechny pozdější Aktivace této konfigurace řešení budou skoro okamžité.
Visual Studio 2017 verze 15.3
- Několik průvodců projektu a kódu je přepsaných ve stylu dialogu podpisu.
- Přidat třídu nyní spustí Průvodce přidáním třídy přímo. Všechny ostatní položky, které byly dříve zde, jsou nyní k dispozici v části Přidat novou položku.
- projekty Win32 jsou nyní pod kategorií Windows Desktop v dialogovém okně nový Project .
- šablony Windows konzolu a aplikace klasické pracovní plochy nyní vytvářejí projekty bez zobrazení průvodce. v rámci stejné kategorie je k dispozici nový průvodce Windows plochy , ve kterém se zobrazují stejné možnosti jako původní průvodce konzolové aplikace Win32 .
Visual Studio 2017 verze 15.5
Několik operací C++, které používají modul IntelliSense pro refaktoring a navigaci v kódu, se spouští mnohem rychleji. následující čísla jsou založena na řešení Visual Studio Chromium s 3500 projekty:
| Funkce | Zlepšení výkonu |
|---|---|
| přejmenování | 5.3 x |
| Změnit signaturu | 4.5 x |
| Najít všechny odkazy | 4.7 x |
C++ teď podporuje kombinaci kláves Ctrl + kliknutí Přejít k definici, která usnadňuje navigaci myši na definice. Ve výchozím nastavení je teď součástí produktu i Vizualizér struktury ze sady Power nástrojů pro produktivitu.
IntelliSense
Ve výchozím nastavení je nyní používán nový databázový stroj využívající SQLite. Nový modul zrychluje databázové operace jako Přejít k definici a najde všechny odkazy. Významně zlepšuje počáteční dobu analýzy řešení. Nastavení se přesunulo do nástrojů možnosti > textový editor > C/C++ > Upřesnit. (Dříve bylo pod... Experimentální C/C++ > .)
Vylepšili jsme výkon technologie IntelliSense v projektech a souborech, které nepoužívají předkompilované hlavičky – pro hlavičky aktuálního souboru se vytvoří Automatická Předkompilovaná hlavička.
Přidali jsme do seznamu chyb filtrování a nápovědu k chybám technologie IntelliSense. Kliknutí na sloupec s chybami teď umožní je filtrovat. Kromě toho kliknutím na konkrétní chyby nebo stisknutím klávesy F1 spustíte online vyhledávání chybové zprávy.


Přidali jsme možnost filtrovat položky seznamu členů podle typu.

Přidali jsme novou experimentální funkci prediktivní technologie IntelliSense, která poskytuje kontextově závislé filtrování toho, co se zobrazuje v seznamu členů. Další informace najdete v tématu vylepšení C++ IntelliSense – prediktivní filtrování IntelliSense.
Najít všechny odkazy (SHIFT + F12) nyní usnadňuje snadnou navigaci, a to i v komplexních základech kódu. Poskytuje pokročilé seskupení, filtrování, řazení, hledání v rámci výsledků a (u některých jazyků), takže můžete získat jasné informace o svých odkazech. V jazyce C++ nové uživatelské rozhraní obsahuje informace o tom, jestli se čte z proměnné nebo do ní zapisovat.
Funkce změny tečky na šipku technologie IntelliSense se změnila z experimentální na pokročilou a teď je ve výchozím nastavení povolená. Funkce editoru rozšiřují obory a zároveň se přesunula Priorita z experimentální na pokročilou.
Funkce experimentálního refaktoringu změnit signaturu a extrahovat funkci jsou teď ve výchozím nastavení dostupné.
Bylo přidáno experimentální funkce rychlejšího načítání projektů pro projekty v jazyce C++. Při příštím otevření projektu C++ se načtou rychleji a čas po jeho načtení bude mnohem rychlejší.
Některé z těchto funkcí jsou společné pro jiné jazyky a některé jsou specifické pro jazyk C++. další informace o těchto nových funkcích naleznete v tématu oznamujeme Visual Studio "15" Preview 5.
Visual Studio 2017 verze 15.7
- Byla přidána podpora pro ClangFormat. další informace najdete v tématu podpora ClangFormat v Visual Studio 2017.
projekty bez MSBuild s otevřenou složkou
Visual Studio 2017 zavádí funkci otevřené složky . Umožňuje kódování, sestavení a ladění ve složce obsahující zdrojový kód bez nutnosti vytvářet žádná řešení nebo projekty. nyní je mnohem jednodušší začít s Visual Studio, a to i v případě, že projekt není projekt založený MSBuild. Při otevření složky získáte přístup k výkonným funkcím pro porozumění, úpravám, sestavování a ladění kódu. jsou to stejné jako ty, které Visual Studio už poskytují MSBuild projektů. Další informace naleznete v tématu Otevřít složku projekty pro jazyk C++.
- Vylepšení prostředí Otevřít složku Můžete přizpůsobit prostředí pomocí těchto souborů. JSON:
- CppProperties.json použijte k přizpůsobení technologie IntelliSense a prostředí procházení.
- Tasks.json použijte k přizpůsobení kroků sestavení.
- Launch.json použijte k přizpůsobení prostředí ladění.
Visual Studio 2017 verze 15.3
- Vylepšená podpora alternativních kompilátorů a prostředí pro sestavování, jako jsou MinGW a Cygwin. Další informace najdete v tématu použití MinGW a Cygwin s Visual C++ a otevření složky.
- Přidání podpory pro definování globálních a specifických proměnných prostředí specifických pro konfiguraci v CppProperties. JSON a CMakeSettings. JSON. Tyto proměnné prostředí lze spotřebovat pomocí konfigurací ladění definovaných v příkazu Launch. vs. JSON a úkoly v Tasks. vs. JSON. Další informace najdete v tématu přizpůsobení prostředí pomocí Visual C++ a otevřené složky.
- Vylepšená podpora generátoru expertem CMake, včetně možnosti snadno cílit na 64 bitů na platformě.
Podpora CMake prostřednictvím otevřené složky
Visual Studio 2017 zavádí podporu pro použití projektů cmake bez převodu na soubory projektu MSBuild (. vcxproj). Další informace najdete v tématu projekty cmake v Visual Studio. Otevření projektů CMake s otevřenou složkou automaticky nakonfiguruje prostředí pro úpravy, sestavování a ladění C++.
C++ IntelliSense funguje bez nutnosti vytvořit soubor CppProperties. JSON v kořenové složce. Přidali jsme také nové rozevírací seznam umožňující uživatelům snadno přepínat mezi konfiguracemi poskytovanými soubory CMake a CppProperties. JSON.
Prostřednictvím souboru CMakeSettings.json, který je umístěný ve stejné složce jako soubor CMakeLists.txt, se podporuje další konfigurace.

Visual Studio 2017 verze 15.3
- Přidala se podpora pro generátor expertem CMake.
Visual Studio 2017 verze 15.4
- Byla přidána podpora pro import existujících mezipamětí CMake.
Visual Studio 2017 verze 15.5
- Přidala se podpora pro CMake 3,11, analýza kódu v projektech CMake, zobrazení cílů v Průzkumník řešení, možnosti generování mezipaměti a kompilace jednoho souboru. další informace najdete v tématu podpora cmake v Visual Studio a projektech cmake v Visual Studio.
Vývoj desktopových aplikací pro Windows
Při instalaci původní úlohy pro C++ teď poskytujeme podrobnější prostředí instalace. Přidali jsme volitelné součásti, které vám umožní vybrat a nainstalovat jen ty nástroje, které potřebujete. Uvedené velikosti instalace pro součásti uvedené v uživatelském rozhraní instalačního programu jsou nesprávné a podceňují skutečnou celkovou velikost.
Když chcete úspěšně vytvářet projekty Win32 v úloze vývoje desktopových aplikací v C++, musíte nainstalovat sadu nástrojů i sadu Windows SDK. nainstalujte doporučené (vybrané) komponenty VC + + 2017 v141 sady nástrojů (x86, x64) a Windows 10 SDK (10.0. nnnnn) , abyste se ujistili, že funguje. Pokud nejsou potřebné nástroje nainstalované, projekty se nevytvoří úspěšně a Průvodce přestane reagovat.
Visual Studio 2017 verze 15.5
nástroje pro Visual C++ Build (dříve dostupné jako samostatný produkt) jsou teď zahrnuté jako úlohy v Instalační program pro Visual Studio. tato úloha nainstaluje jenom nástroje potřebné k sestavení projektů C++ bez instalace Visual Studio IDE. Zahrnují se sady nástrojů v140 i v141. sada nástrojů v141 obsahuje nejnovější vylepšení Visual Studio 2017 verze 15,5. další informace najdete v tématu Visual Studio Build Tools nyní zahrnují sady nástrojů MSVC pro VS2017 a VS2015.
Vývoj linuxových aplikací v jazyce C++
Oblíbené rozšíření Visual C++ for Linux Development je teď součástí sady Visual Studio. Tato instalace nabízí všechno, co potřebujete k vývoji a ladění aplikací v jazyce C++, které se spouštějí v prostředí systému Linux.
Visual Studio 2017 verze 15.2
Vylepšení byla provedená ve sdílení kódu mezi platformami a vizualizací typů. Další informace najdete v tématu vylepšení pro Linux C++ pro sdílení kódu pro různé platformy a vizualizaci typů.
Visual Studio 2017 verze 15.5
- Úloha Linux přidala podporu pro rsync jako alternativu k protokolu SFTP pro synchronizaci souborů na vzdálených počítačích se systémem Linux.
- Je přidána podpora pro různé kompilace cílící na mikrokontroléry ARM. Pokud ho chcete v instalaci povolit, zvolte vývoj pro Linux s využitím úlohy C++ a vyberte možnost pro integrovaný vývoj a vývoj IoT. tato možnost přidá nástroje ARM GCC pro více kompilačních nástrojů a provede instalaci. další informace najdete v tématu GCC pro více kompilací v Visual Studio ARM.
- Přidala se podpora pro CMake. teď můžete pracovat na svém stávajícím základu kódu cmake, aniž byste ho museli převést na Visual Studio projekt. Další informace najdete v tématu konfigurace Project pro Linux cmake.
- Byla přidána podpora pro spouštění vzdálených úloh. tato funkce umožňuje spustit libovolný příkaz ve vzdáleném systému, který je definovaný ve správci připojení Visual Studio. Vzdálené úlohy také poskytují možnost kopírování souborů do vzdáleného systému. Další informace najdete v tématu konfigurace Project pro Linux cmake.
Visual Studio 2017 verze 15.7
- Různá vylepšení scénářů pro úlohy Linux. další informace najdete v tématu vylepšení úlohy linux C++ do systému Project, okna konzoly linux, rsync a připojení k procesu.
- Technologie IntelliSense pro záhlaví na vzdálených připojeních systému Linux. Další informace najdete v tématech technologie IntelliSense pro vzdálené Linux hlavičky a konfigurace Project pro Linux cmake.
Vývoj her v jazyce C++
Využijte naplno potenciál C++ k vytváření profesionálních her využívajících technologii DirectX nebo Cocos2d.
Vývoj pro mobilní zařízení pomocí C++ pro Android a iOS
Mobilní aplikace teď můžete vytvářet a ladit pomocí sady Visual Studio, která se umí zaměřit i na Android a iOS.
Univerzální aplikace pro Windows
C++ je volitelnou součástí úlohy Universal Windows App. V současné době je nutné upgradovat projekty C++ ručně. projekt Univerzální platforma Windows cílené na v140 můžete otevřít v Visual Studio 2017. pokud však nemáte nainstalované Visual Studio 2015, je nutné vybrat sadu nástrojů platformy v141 na stránkách vlastností projektu.
nové možnosti pro C++ na Univerzální platforma Windows (UWP)
nyní máte k dispozici nové možnosti pro psaní a balení aplikací C++ pro Univerzální platforma Windows a úložiště Windows: infrastruktura Přemostění na desktop umožňuje zabalit stávající desktopovou aplikaci nebo objekt COM k nasazení prostřednictvím úložiště Windows. Nebo můžete pro nasazení prostřednictvím svých stávajících kanálů prostřednictvím načítacího načítání. nové funkce v Windows 10 umožňují přidat do aplikace pro stolní počítače funkce UWP různými způsoby. další informace najdete v tématu Přemostění na desktop.
Visual Studio 2017 verze 15.5
přidá se Windows balíček aplikace Project šablona projektu, což výrazně zjednodušuje balení desktopových aplikací pomocí Přemostění na desktop. Je k dispozici v souboru | Nové | Project | Nainstalováno | Visual C++ | Univerzální platforma Windows. další informace najdete v tématu sbalení aplikace pomocí Visual Studio (Přemostění na desktop).
při psaní nového kódu teď můžete použít C++/WinRT, což je standardní projekce jazyka c++ pro prostředí Windows Runtime implementované výhradně v hlavičkových souborech. umožňuje využívat a vytvářet prostředí Windows Runtime rozhraní api pomocí všech standardů, které jsou v jazyce C++ vyhovující. c++/WinRT je navržený tak, aby poskytoval vývojářům c++ přístup ke špičkovému rozhraní API pro moderní Windows. Další informace najdete v tématu C++/WinRT.
od verze build 17025 Windows SDK Insider preview je/WinRT C++ zahrnutý v Windows SDK. další informace najdete v části C++/WinRT je teď součástí Windows SDK.
Sada nástrojů platformy Clang/C2
sada nástrojů Clang/C2, která se dodává s Visual Studio 2017, teď podporuje /bigobj přepínač, který je rozhodující pro sestavování rozsáhlých projektů. Obsahuje také několik důležitých oprav chyb, a to jak ve front-endu kompilátoru, tak v back-endu.
Analýza kódu C++
Se sadou Visual Studio se nyní distribuují moduly pro kontrolu jádra C++, které vynucují pokyny pro jádro C++. Na stránce rozšíření Code Analysis na stránkách vlastností projektu povolte kontrolu. Rozšíření se pak zahrnou při spuštění analýzy kódu. Další informace najdete v tématu Použití C++ Core Guidelines kontrolu.
Snímek obrazovky s dialogem Stránky vlastností Code Analysis možností Obecné a několika základními kontrolami uvedenými v části Spuštění této sady pravidel
Visual Studio 2017 verze 15.3
- Byla přidána podpora pro pravidla související se sekce prostředků.
Visual Studio 2017 verze 15.5
Nové C++ Core Guidelines kontroly zahrnují správnost inteligentního ukazatele, správné použití globálních inicializátorů a označení použití konstruktorů, jako jsou a
gotochybná přetypování.Některá čísla upozornění, která najdete v 15.3, už nejsou k dispozici v 15.5. Tato upozornění byla nahrazena specifičtějšími kontrolami.
Visual Studio 2017 verze 15.6
- Byla přidána podpora pro analýzu s jedním souborem a vylepšení výkonu analýzy za běhu. Další informace najdete v tématu Vylepšení statické analýzy C++ pro Visual Studio 2017 15.6 Preview 2.
Visual Studio 2017 verze 15.7
- Byla přidána podpora
/analyze:rulesetpro , která umožňuje určit pravidla analýzy kódu, která se mají spustit. - Byla přidána podpora dalších C++ Core Guidelines pravidel. Další informace najdete v tématu Použití C++ Core Guidelines kontrolu.
Testování částí v Visual Studio 2017
Visual Studio 2017 verze 15.5
Google Test Adapter a Boost.Test Adapter jsou teď k dispozici jako součásti úlohy Vývoj desktopových aplikací pomocí C++. Jsou integrované s Průzkumníkem testů. Pro projekty CMake (pomocí otevřít složku) je přidaná podpora CTestu, i když úplná integrace s Průzkumníkem testů ještě není dostupná. Další informace najdete v tématu Zápis testů jednotek pro C/C++.
Visual Studio 2017 verze 15.6
- Byla přidána podpora
Boost.Testdynamické knihovny. - V
Boost.Testintegrovaném vývojovém prostředí je teď k dispozici šablona položky.
Další informace najdete v tématu Testování částí: Podpora dynamické knihovny a Nová šablona položky.
Visual Studio 2017 verze 15.7
Byla přidána podpora CodeLens pro projekty testů jednotek C++. Další informace najdete v tématu Oznamujeme CodeLens pro testování částí C++.
Visual Studio diagnostiky grafiky
Visual Studio Diagnostika grafiky nástroje: Můžete je použít k zaznamenávání a analýze problémů s vykreslováním a výkonem v aplikacích Direct3D. Používejte je v aplikacích, které běží místně na Windows počítači, v emulátoru Windows zařízení nebo na vzdáleném počítači nebo zařízení.
Vstupní Výstup pro vrchol a shadery geometrie: Možnost zobrazit vstup a výstup shaderů vrcholů a shaderů geometrie byla jedním z nejžádanějších prvků. V nástrojích je teď podporovaná. V zobrazení Fáze kanálu vyberte fázi VS nebo GS a začněte kontrolovat její vstup a výstup v následující tabulce.

Hledání a filtrování v tabulce objektů: Poskytuje rychlý a snadný způsob, jak najít prostředky, které hledáte.

Historie prostředků: Toto nové zobrazení poskytuje zjednodušený způsob zobrazení celé historie úprav prostředku, protože se použil při vykreslování zachyceného snímku. Pokud chcete vyvolat historii libovolného prostředku, klikněte na ikonu hodin vedle hypertextového odkazu na prostředek.

Zobrazí se nové okno nástroje Resource History naplněné historií změn prostředku.

Můžete zachytávání snímků s povoleným úplným zachytáváním zásobníku volání. To vám umožní rychle odvodit kontext každé události změny a zkontrolovat ji v rámci Visual Studio projektu. Nastavte možnost úplného zachytávání zásobníku v dialogovém Visual Studio Nástroje včásti Diagnostika grafiky.
Statistika rozhraní API: Podívejte se na souhrnné informace o využití rozhraní API v rámci vašeho rámce. Je to vhod pro zjišťování volání, která možná vůbec neuvědomujete, nebo volání, která děláte příliš často. Toto okno je k dispozici prostřednictvím zobrazení statistik rozhraní API v Visual Studio Graphics Analyzer.

Statistika paměti: Podívejte se, kolik paměti ovladač přiděluje prostředkům, které v rámci vytvoříte. Toto okno je k dispozici prostřednictvím nástroje View Memory Statistics in Visual Studio Graphics Analyzer. Pokud chcete zkopírovat data do souboru CSV pro zobrazení v tabulce, klikněte pravým tlačítkem a zvolte Kopírovat vše.

Ověření rámce: Nový seznam chyb a upozornění poskytuje snadný způsob, jak procházet seznam událostí na základě potenciálních problémů zjištěných vrstvou ladění Direct3D. Kliknutím na Zobrazit ověření rámce Visual Studio analyzátoru grafiky otevřete okno. Pak kliknutím na Spustit ověření spusťte analýzu. Dokončení může trvat několik minut v závislosti na složitosti rámu.

Analýza snímků pro D3D12: Analýza snímků slouží k analýze výkonu volání kreslení pomocí cílené experimenty "what-if". Přepněte na kartu Analýza rámců a spusťte analýzu, abyste si sestavu prohlíželi.

Vylepšení využití GPU: Otevřená trasování je možné získat pomocí profileru využití GPU Visual Studio GPU pomocí zobrazení GPU nebo nástroje Windows Analyzátor výkonu (WPA) pro podrobnější analýzu. Pokud máte nainstalovaný nástroj Windows Performance Toolkit, v pravém dolním rohu přehledu relace jsou dva hypertextové odkazy: jeden pro WPA a druhý pro zobrazení GPU.

Trasování, která otevřete v zobrazení GPU prostřednictvím tohoto odkazu, podporují synchronizované zvětšení a posouvání časové osy zobrazení GPU. Zaškrtávací políčko ve VS určuje, jestli je synchronizace povolená nebo ne.
