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í /sdl s /await . Odebrali jsme /RTC omezení 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++latest možností.

  • /std:c++17 povoluje 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:cf teď 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_yield místo toho. Další informace najdete v tématu klíčové slovo, které se má co_yield v 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

Standardní knihovna C++

Vylepšení správnosti

Visual Studio 2017 RTM (verze 15,0)
  • Menší basic_string_ITERATOR_DEBUG_LEVEL != 0 vylepš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::promise operá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 na T* .
  • pointer_traits<Ptr> nyní správně detekuje Ptr::rebind<U> .
  • Opravili chybějící const kvalifikátor v move_iterator operá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_assignment a propagate_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() na numeric_limits<difference_type>::max() místo max()size_type . Tato změna zajišťuje, že výsledek z distance() iterátorů z tohoto kontejneru je reprezentovatelné v návratovém typu distance() .
  • Pevná auto_ptr<void> chybějící specializace
  • for_each_n()Předtím, než je generate_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átory difference_type .
  • normal_distribution<float> už negeneruje upozornění uvnitř standardní knihovny o zúžení z Double na float.
  • Opravili jsme některé basic_string operace, které se npos místo toho používaly max_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ěřuje future , 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_traits v podmínkách SFINAE typu "je iterátor".
  • Některá upozornění hlášená Clang -Wsystem-headers byla 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_swap nedefinované podmínky nedefinovaného nedefinovaného přidělujícího modulu, který nerovná se).
  • Mnoho vector<bool> operací je nyní označeno noexcept .
  • 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_string zaznamenal 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ím propagate_on_container_swap .
  • std::decay nyní 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 /Wall vyč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::list kontroly ladění. Seznam iterátorů nyní kontroluje operator->() a list::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::partition nyní N namísto času volá predikát N + 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é T použí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::npos je nyní k dispozici jako časová konstanta kompilace.
  • std::allocator v 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_type a < cstdalign > .
  • Povoleno C++ 14 constexpr v min(initializer_list) , max(initializer_list) ,, minmax(initializer_list) a min_element()max_element() , a minmax_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() i rethrow_if_nested()dynamic_cast z nich vyžadují, aby ji standardní knihovna nyní vyznačuje jako =delete v 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áže std::any , target() a target_type() členské funkce a členské std::functionget_deleter() funkce std::shared_ptrstd::weak_ptr typu a.
  • Standardní knihovna nyní používá C++ 14 constexpr nepodmíněný, namísto podmíněně definovaných maker.
  • Standardní knihovna nyní používá šablony aliasu interně.
  • Standardní knihovna nyní používá nullptr interně místo nullptr_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í knihovny fputs()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_of
    • any_of
    • for_each
    • for_each_n
    • none_of
    • reduce
    • replace
    • replace_if
    • sort
  • 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:
    • copy
    • copy_n
    • fill
    • fill_n
    • move
    • reverse
    • reverse_copy
    • rotate
    • rotate_copy
    • swap_ranges
Visual Studio 2017 verze 15.6
  • <memory_resource>
  • Základy knihovny v1
  • Odstraňuje se polymorphic_allocator př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::byte
  • hypot(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í jenom traits::find jednou. 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í reserve stále obsahuje nenulové náklady, aby nedošlo k žádné akci.
  • std::vector se 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 Via move_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::string a std::wstring Př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::atomic implementace 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í na try_lock() všech zámkech.
  • Byla povolena optimalizace pojmenované návratové hodnoty v system_category::message() .
  • conjunction a disjunction nyní vytváří instanci N + 1 typů namísto 2N + 2 typů.
  • std::function již 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ů lambda std::function .
  • allocator_traits<std::allocator> obsahuje ručně vložené std::allocator operace, zmenšení velikosti kódu v kódu, který komunikuje std::allocatorallocator_traits pouze 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_traits pří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í pro shrink_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_string operace 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í errno mají v mezipaměti adresu pro odebrání opakované interakce s protokolem TLS.
  • Zjednodušená is_pointer implementace.
  • Změna výrazu založeného na funkci SFINAE na struct a void_t na 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::vector př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í stejnou memcmp , memcpy a podobnou optimalizaci, která se basic_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_difference a set_union byla snížena pomocí rozbalení iterátorů před ověřením pořadí.
  • std::inplace_merge nyní přeskočí nad prvky, které již jsou na pozici.
  • Sestavování již std::random_device není konstrukce a poté zničení std::string .
  • std::equal a std::partition měl průchod s optimalizací pro dělení na vlákna, který ukládá porovnání iterátoru.
  • Když std::reverse je předána ukazatelům na triviální kopii T , bude nyní zaslána do ručně určené vektorové implementace.
  • std::fill, std::equal a std::lexicographical_compare byly výukou, jak odesílat do memset a memcmp pro std::byte a gsl::byte (a další výčty typu char a třídy výčtu). Vzhledem k std::copyis_trivially_copyable tomu, ž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.

    Seznam chyb.

    Seznam chyb filtrováno.

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

    Filtrování seznamu členů.

  • 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

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.

    Otevřená složka cmake

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

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

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.

Screenshot of the Property Pages dialog box showing Configuration Properties > Code Analysis > General selected and a number of Core Checks listed in teh Run this rule set section.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 goto chybná 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
Visual Studio 2017 verze 15.7

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.Test dynamické knihovny.
  • V Boost.Test integrované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.

    Vstup/výstup pro shadery.

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

    Snímek obrazovky s částí Tabulka objektů se zobrazenou rozevíracím seznamem Typ a textovým polem Hledat

  • 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.

    Historie prostředků.

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

    Změna historie prostředků.

    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.

    Statistiky rozhraní API.

  • 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.

    Statistiky paměti.

  • 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.

    Ověření snímku.

  • 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.

    Analýza snímků:

  • 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.

    Využití 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.

    Zobrazení GPU.