Co je nového v aplikaci Visual C++ v sadě Visual Studio 2017What's New for Visual C++ in Visual Studio 2017

Visual Studio 2017 přináší řadu vylepšení a oprav prostředí Visual C++.Visual Studio 2017 brings many updates and fixes to the Visual C++ environment. Jsme opravili víc než 250 chyb a nahlášených problémů v kompilátoru a nástrojů, řadu z nich odeslali zákazníci přes nahlásit problém a poslat návrh možnosti v části odeslat zpětnou vazbu .We've fixed over 250 bugs and reported issues in the compiler and tools, many submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. Děkujeme vám, že hlásíte chyby!Thank you for reporting bugs! Další informace o tom, co je nového v celé sady Visual Studio, navštivte co je nového v sadě Visual Studio 2017.For more information on what's new in all of Visual Studio, please visit What's new in Visual Studio 2017.

kompilátor C++C++ compiler

Vylepšení shody C++C++ conformance improvements

V této verzi jsme kompilátor jazyka C++ a standardní knihovny doplnili rozšířenou podporou pro funkce C++11 a C++14, a také předběžnou podporou pro některé funkce očekávané ve standardu C++17.In this release, we've updated the C++ compiler and standard library with enhanced support for C++11 and C++14 features, as well as preliminary support for certain features expected to be in the C++17 standard. Podrobné informace najdete v tématu vylepšení shody C++ v sadě Visual Studio 2017.For detailed information, see C++ Conformance Improvements in Visual Studio 2017.

Visual Studio 2017 verze 15.5: kompilátor podporuje přibližně 75 % funkcí, které jsou nové v C ++ 17, včetně strukturovaných vazeb constexpr výrazy lambda, if constexpr, přeložte vložených proměnných, výrazů a přidání noexcept k systém typů.Visual Studio 2017 version 15.5: The compiler supports about 75% of the features that are new in C++17, including structured bindings, constexpr lambdas, if constexpr, inline variables, fold expressions, and adding noexcept to the type system. Tyto jsou dostupné v rámci /std: c ++ 17 možnost.These are available under the /std:c++17 option. Další informace najdete v tématu vylepšení shody C++ v sadě Visual Studio 2017For more information, see C++ Conformance Improvements in Visual Studio 2017

Visual Studio 2017 verze 15.7: Sada nástrojů kompilátoru MSVC v sadě Visual Studio verze 15.7 nyní odpovídá standardu C++.Visual Studio 2017 version 15.7: The MSVC compiler toolset in Visual Studio version 15.7 now conforms with the C++ Standard. Další informace najdete v tématu Announcing: MSVC splňuje C++ Standard a shoda jazyka Visual C++.For more information, see Announcing: MSVC Conforms to the C++ Standard and Visual C++ Language Conformance.

Nové možnosti kompilátoruNew compiler options

  • / permissive-: Povolit všechny možnosti kompilátoru shoda přísné standardy a zakázat většina kompilátoru rozšíření specifické pro společnost Microsoft (ale ne __declspec(dllimport), například)./permissive-: Enable all strict standards conformance compiler options and disable most Microsoft-specific compiler extensions (but not __declspec(dllimport), for example). Tato možnost zapnutá ve výchozím nastavení v sadě Visual Studio 2017 verze 15.5.This option is on by default in Visual Studio 2017 version 15.5. / Permissive- režim přizpůsobení zahrnuje podporu pro dvoufázové vyhledávání názvů.The /permissive- conformance mode includes support for two-phase name lookup. Další informace najdete v tématu vylepšení shody C++ v sadě Visual Studio 2017.For more information, see C++ Conformance Improvements in Visual Studio 2017.

  • / Diagnostics: povolení zobrazení číslo řádku, číslo řádku a sloupce, nebo číslo řádku a sloupce a blikající kurzor pod řádkem kódu, kde byla nalezena diagnostických chyb nebo upozornění./diagnostics: Enable display of the line number, the line number and column, or the line number and column and a caret under the line of code where the diagnostic error or warning was found.

  • / Debug: fastlink: povolit až 30 % rychlejší přírůstkové propojení vyprší (vs. Visual Studio 2015) není zkopírováním všechny informace o ladění do souboru PDB./debug:fastlink: Enable up to 30% faster incremental link times (vs. Visual Studio 2015) by not copying all debug information into the PDB file. Soubor PDB se místo toho odkazuje na informace o ladění pro soubory objektů a knihovny použité k vytvoření spustitelného souboru.The PDB file instead points to the debug information for the object and library files used to create the executable. Zobrazit cyklus v sadě Visual Studio "15" s/Debug: fastlink sestavení C++ rychleji a doporučení k urychlení sestavení C++ v sadě Visual Studio.See Faster C++ build cycle in VS "15" with /Debug:fastlink and Recommendations to speed C++ builds in Visual Studio.

  • Visual Studio 2017 umožňuje používat /SDL s / await.Visual Studio 2017 allows using /sdl with /await. Odebrali jsme /RTC omezení u Korutin.We removed the /RTC limitation with Coroutines.

    Visual Studio 2017 verze 15.3:Visual Studio 2017 version 15.3:

  • / std: c ++ 14 a/std: c ++ nejnovější: tyto možnosti kompilátoru umožňují vyjádřit výslovný souhlas pro konkrétní verze ISO C++ programovací jazyk v projektu./std:c++14 and /std:c++latest: These compiler options enable you to opt-in to specific versions of the ISO C++ programming language in a project. Většina konceptu nové funkce na úrovni standard jsou strážený /std: c ++ nejnovější možnost.Most of the new draft standard features are guarded by the /std:c++latest option.

  • / std: c ++ 17 umožňuje sadu funkcí C ++ 17 implementované kompilátorem./std:c++17 enables the set of C++17 features implemented by the compiler. Tato možnost zakáže kompilátoru a standardní knihovny podpora pro funkce, které se mění nebo nového ve verzích konceptu práce a defect aktualizace standardu jazyka C++ za C ++ 17.This option disables compiler and standard library support for features that are changed or new in versions of the Working Draft and defect updates of the C++ Standard after C++17. Chcete-li povolit tyto funkce, použijte /std: c ++ nejnovější.To enable those features, use /std:c++latest.

CODEGEN, zabezpečení, Diagnostika a správa verzíCodegen, security, diagnostics and versioning

Tato verze přináší několik vylepšení optimalizace, generování kódu, nástrojů pro správu verzí a Diagnostika.This release brings several improvements in optimization, code generation, toolset versioning, and diagnostics. Mezi důležitá vylepšení patří:Some notable improvements include:

  • Vylepšené generování kódu smyček: Podpora automatické vektorizace dělení konstantních celých čísel, lepší identifikace vzorů memsetImproved code generation of loops: Support for automatic vectorization of division of constant integers, better identification of memset patterns.
  • 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í tabulku skoků.Improved code security: Improved emission of buffer overrun compiler diagnostics, and /guard:cf now guards switch statements that generate jump tables.
  • Správa verzí: Hodnota předdefinované makro preprocesoru _MSC_VER je nyní monotónně aktualizují při každé aktualizaci nástrojů Visual C++.Versioning: The value of the built-in preprocessor macro _MSC_VER is now being monotonically updated at every Visual C++ toolset update. Další informace najdete v tématu verze kompilátoru Visual C++.For more information, see Visual C++ Compiler Version.
  • Nové rozložení sady nástrojů: kompilátor a nástroje pro související sestavení mají novou strukturu umístění a adresáře na vývojovém počítači.New toolset layout: The compiler and related build tools have a new location and directory structure on your development machine. Nové rozložení umožňuje-souběžnými instalacemi více verzí kompilátoru.The new layout enables side-by-side installations of multiple versions of the compiler. Další informace najdete v tématu kompilátoru rozložení nástroje v sadě Visual Studio "15".For more information, see Compiler Tools Layout in Visual Studio "15".
  • Vylepšená Diagnostika: V okně výstupu teď zobrazuje sloupec, kde dojde k chybě.Improved diagnostics: The output window now shows the column where an error occurs. Další informace najdete v tématu vylepšení diagnostiky kompilátoru C++ v sadě Visual Studio "15" Preview 5.For more information, see C++ compiler diagnostics improvements in VS "15" Preview 5.
  • Při používání společných rutin, experimentální klíčové slovo yield (k dispozici v rámci / await možnost) byla odebrána.When using co-routines, the experimental keyword yield (available under the /await option) has been removed. Váš kód by měl být aktualizován na použití co_yield místo.Your code should be updated to use co_yield instead. Další informace najdete v Blogu týmu Visual C++.For more information, see the Visual C++ Team blog.

Visual Studio 2017 verze 15.3:Visual Studio 2017 version 15.3:

Další vylepšení diagnostiky v kompilátoru.Additional improvements to diagnostics in the compiler. Další informace najdete v tématu vylepšení diagnostiky v sadě Visual Studio 2017 15.3.0.For more information, see Diagnostic Improvements in Visual Studio 2017 15.3.0.

Visual Studio 2017 verze 15.5:Visual Studio 2017 version 15.5:

Výkon sady Visual C++ runtime neustále zlepšuje kvůli lepší kvalitu generovaného kódu.Visual C++ runtime performance continues to improve due to better generated code quality. To znamená, že můžete jednoduše znovu zkompilovat kód a vaše aplikace běží rychleji.This means that you can simply recompile your code, and your app runs faster. Některé optimalizace kompilátoru jsou úplně nové, jako je například vektorizaci podmíněných skalárních úložišť, kombinování volání sin(x) a cos(x) do nového sincos(x)a odstranění redundantní pokyny od Optimalizátor SSA.Some of the compiler optimizations are brand new, such as the vectorization of conditional scalar stores, the combining of calls sin(x) and cos(x) into a new sincos(x), and the elimination of redundant instructions from the SSA Optimizer. Další optimalizace kompilátoru jsou vylepšení stávajících funkcí, jako je například heuristiku vektorizéru pro podmíněné výrazy, lepší optimalizace smyčky a plovoucí codegen min/max.Other compiler optimizations are improvements to existing functionality such as vectorizer heuristics for conditional expressions, better loop optimizations, and float min/max codegen. Propojovací program má nový a rychlejší /OPT:ICF implementaci, což může mít za následek až 9 % urychlení propojení a existují další opravy výkonu v přírůstkové propojení.The linker has a new and faster /OPT:ICF implementation which can result in up to 9% link time speedups, and there are other perf fixes in incremental linking. Další informace najdete v tématu /OPT (optimalizace) a Parametr/incremental (Inkrementální odkaz).For more information, see /OPT (Optimizations) and /INCREMENTAL (Link Incrementally).

Jazyk Visual C++ podporuje společnosti Intel AVX-512, včetně instrukcí pro délku vektoru, které přinášejí nové funkce v AVX-512 do 128 - a 256bitových širokých registrů.Visual C++ supports Intel's AVX-512, including the Vector Length instructions that bring new functions in AVX-512 to 128- and 256-bit wide registers.

/Zc:noexceptTypes- možnosti je možné vrátit zpět do C ++ 14 verze noexcept přitom C ++ 17 režim obecně.The /Zc:noexceptTypes- option can be used to revert to the C++14 version of noexcept while using C++17 mode in general. To vám umožní aktualizovat váš zdrojový kód tak, aby odpovídal C ++ 17, aniž byste museli přepsat všechny vaše throw() kódu ve stejnou dobu.This enables you to update your source code to conform to C++17 without having to rewrite all your throw() code at the same time. Další informace najdete v tématu odebrání specifikace dynamických výjimek a noexcept.For more information, see Dynamic exception specification removal and noexcept.

Visual Studio 2017 verze 15.7:Visual Studio 2017 version 15.7:

Vylepšení standardní knihovny C++C++ Standard Library improvements

  • Vedlejší basic_string _ITERATOR_DEBUG_LEVEL != 0 vylepšení diagnostiky.Minor basic_string _ITERATOR_DEBUG_LEVEL != 0 diagnostics improvements. Přeskočení kontroly IDL v sadě řetězců teď oznámí konkrétní chování, které toto přeskočení způsobilo.Tripping an IDL check in string machinery will now report the specific behavior that caused the trip. 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).For example, instead of "string iterator not dereferencable" you'll get "cannot dereference string iterator because it is out of range (e.g. an end iterator)".
  • Zlepšení výkonu: provedené basic_string::find(char) přetížení pouze volání traits::find po.Performance improvement: made basic_string::find(char) overloads only call traits::find once. Toto jsme dříve implementovali jako hledání obecného řetězce s délkou 1.Previously this was implemented as a general string search for a string of length 1.
  • Zlepšení výkonu: basic_string::operator== teď kontroluje velikost řetězce před porovnáním obsahů řetězců.Performance improvement: basic_string::operator== now checks the string's size before comparing the strings' contents.
  • Zlepšení výkonu: odebrali jsme párování v ovládacích basic_string, což bylo obtížné optimalizátoru k analýze.Performance improvement: removed control coupling in basic_string, which was difficult for the compiler optimizer to analyze. Všimněte si, že u všech krátkých řetězců volání reserve má stále nenulové náklady na neprovedení.Note that for all short strings, calling reserve still has a nonzero cost to do nothing.
  • Přidali jsme <jakékoli>, <string_view>, apply(), make_from_tuple().We added <any>, <string_view>, apply(), make_from_tuple().
  • std::vector přepracována pro vyšší výkon a správnost: aliasy při vkládání a uložení je nyní správně zpracovává jako vyžaduje Standard, záruka silné výjimky je nyní k dispozici pokud to vyžaduje Standard prostřednictvím move_if_noexcept() a další logiky a vložení nebo uložení provádí méně operací s prvky.std::vector has been overhauled for correctness and performance: aliasing during insertion and emplacement is now correctly handled as required by the Standard, the strong exception guarantee is now provided when required by the Standard via move_if_noexcept() and other logic, and insertion/emplacement perform fewer element operations.
  • Standardní knihovny C++ teď předchází přesměrování ukazatelů null.The C++ Standard Library now avoids dereferencing null fancy pointers.
  • Přidání <volitelné>, <variant>, shared_ptr::weak_type, a <cstdalign>.Added <optional>, <variant>, shared_ptr::weak_type, and <cstdalign>.
  • Povolené C ++ 14 constexpr v min(initializer_list), max(initializer_list), a minmax(initializer_list), a min_element(), max_element(), a minmax_element().Enabled C++14 constexpr in min(initializer_list), max(initializer_list), and minmax(initializer_list), and min_element(), max_element(), and minmax_element().
  • Vylepšené weak_ptr::lock() výkonu.Improved weak_ptr::lock() performance.
  • Oprava std::promise operátor přiřazení přesunu, který dříve mohl způsobit zablokování kódu napořád.Fixed the std::promise move assignment operator, which previously could cause code to block forever.
  • Oprava chyb kompilátoru s atomic<T*> implicitní převod na T*.Fixed compiler errors with the atomic<T*> implicit conversion to T*.
  • pointer_traits<Ptr> nyní správně rozpozná Ptr::rebind<U>.pointer_traits<Ptr> now correctly detects Ptr::rebind<U>.
  • Oprava chybějící const kvalifikátoru v move_iterator operátor odčítání.Fixed a missing const qualifier in the move_iterator subtraction operator.
  • Oprava bezobslužné nesprávné funkce codegen pro stavové uživatelem definované alokátory vyžadující propagate_on_container_copy_assignment a propagate_on_container_move_assignment.Fixed silent bad codegen for stateful user-defined allocators requesting propagate_on_container_copy_assignment and propagate_on_container_move_assignment.
  • atomic<T> Nyní toleruje přetížený operator&().atomic<T> now tolerates overloaded operator&().
  • Pro zvýšení propustnosti kompilátoru hlavičky standardní knihovny C++ nyní Vyhněte se deklarace pro nepotřebné vnitřní funkce kompilátoru.To increase compiler throughput, C++ Standard Library headers now avoid including declarations for unnecessary compiler intrinsics.
  • Mírně Vylepšená Diagnostika kompilátoru pro nesprávná bind() volání.Slightly improved compiler diagnostics for incorrect bind() calls.
  • Vyšší výkon std::string a std::wstring konstruktorů přesunutí více než třikrát.Improved the performance of std::string and std::wstring move constructors by more than three times.

Úplný seznam standardní knihovny improvments najdete v článku standardní knihovny řeší ve VS 2017 RTM.For a complete list of Standard Library improvments see the Standard Library Fixes In VS 2017 RTM.

Visual Studio 2017 verze 15.3Visual Studio 2017 version 15.3

Funkce c ++ 17C++17 features

Několik dalších funkcí C ++ 17 byly implementovány.Several additional C++17 features have been implemented. Další informace najdete v tématu shoda jazyka Visual C++.For more information, see Visual C++ Language Conformance.

Další nové funkceOther new features

  • Implementovat P0602R0 "variant a volitelné by měl rozšířit copy/move triviality".Implemented P0602R0 "variant and optional should propagate copy/move triviality".
  • Standardní knihovna teď oficiálně toleruje dynamické RTTI, protože se zakázalo prostřednictvím /GR- možnost.The Standard Library now officially tolerates dynamic RTTI being disabled via the /GR- option. Obě dynamic_pointer_cast() a rethrow_if_nested() ze své podstaty vyžadují dynamic_cast, takže se označuje jako standardní knihovna teď =delete pod /GR-.Both dynamic_pointer_cast() and rethrow_if_nested() inherently require dynamic_cast, so the Standard Library now marks them as =delete under /GR-.
  • I když dynamické RTTI byl zakázán prostřednictvím /GR-, "statické RTTI" (ve formě typeid(SomeType)) je stále k dispozici a využívá několik součástí standardní knihovny.Even when dynamic RTTI has been disabled via /GR-, "static RTTI" (in the form of typeid(SomeType)) is still available and powers several Standard Library components. Standardní knihovna teď podporuje zakázání to také prostřednictvím /D_HAS_statické_RTTI = 0.The Standard Library now supports disabling this too, via /D_HAS_STATIC_RTTI=0. Všimněte si, že tato akce zakáže std::any, target() a target_type() členské funkce std::functiona get_deleter() členskou funkci friend std::shared_ptr a std::weak_ptr.Note that this will disable std::any, the target() and target_type() member functions of std::function, and the get_deleter() friend member function of std::shared_ptr and std::weak_ptr.

Řeší správnost v sadě Visual Studio 2017 verze 15.3Correctness fixes in Visual Studio 2017 version 15.3

  • Standardní knihovny kontejnery nyní stažení jejich max_size() k numeric_limits<difference_type>::max() místo max() z size_type.Standard Library containers now clamp their max_size() to numeric_limits<difference_type>::max() rather than the max() of size_type. To zajistí, že výsledek distance() na iterátorech z tohoto kontejneru je reprezentovatelné v návratovém typu distance().This ensures that the result of distance() on iterators from that container is representable in the return type of distance().
  • Oprava chybějící specializace auto_ptr<void>.Fixed missing specialization auto_ptr<void>.
  • for_each_n(), generate_n(), A search_n() algoritmy dříve kompilace se nezdařila. Pokud délka argument nebyl uveden celočíselného typu; nyní pokusu o převod – neintegrální délky iterátory difference_type.The for_each_n(), generate_n(), and search_n() algorithms previously failed to compile if the length argument was not an integral type; they now attempt to convert non-integral lengths to the iterators' difference_type.
  • normal_distribution<float> už vydá upozornění ve standardní knihovně o zúžení double uvolnění.normal_distribution<float> no longer emits warnings inside the Standard Library about narrowing from double to float.
  • Oprava některých basic_string operace, které byly výsledkem porovnání s npos místo max_size() při kontrole přetečení maximální velikosti.Fixed some basic_string operations which were comparing with npos instead of max_size() when checking for maximum size overflow.
  • condition_variable::wait_for(lock, relative_time, predicate) by počkejte po celou dobu relativní v případě nesprávné probuzení.condition_variable::wait_for(lock, relative_time, predicate) would wait for the entire relative time in the event of a spurious wake. Nyní bude čekat pouze jeden interval relativní časové.Now it will wait for only a single interval of the relative time.
  • future::get() Nyní zruší platnost future, jak vyžaduje standard.future::get() now invalidates the future, as the standard requires.
  • iterator_traits<void *> umožňuje být závažná chyba, protože se pokusil formuláře void&; nyní čistě stane prázdnou strukturu k povolení použití iterator_traits v "je iterátor" sfinae u podmínek.iterator_traits<void *> used to be a hard error because it attempted to form void&; it now cleanly becomes an empty struct to allow use of iterator_traits in "is iterator" SFINAE conditions.
  • Upozornění hlášených Clang wsystem –--headers jsme vyřešili.Some warnings reported by Clang -Wsystem-headers were fixed.
  • Také vyřešili "specifikace výjimky v deklaraci neodpovídá předchozí deklaraci" hlášených Clang - Wmicrosoft-výjimky spec.Also fixed "exception specification in declaration does not match previous declaration" reported by Clang -Wmicrosoft-exception-spec.
  • Seznam inicializátorů paměť pořadí upozornění hlášených Clang a C1XX také vyřešili.Also fixed mem-initializer-list ordering warnings reported by Clang and C1XX.
  • Neseřazené kontejnery není možné Prohodit jejich hashers nebo predikáty když byli vyměněni kontejnery sami.The unordered containers did not swap their hashers or predicates when the containers themselves were swapped. Nyní dělají.Now they do.
  • Operace prohození mnoho kontejnerů jsou nyní označeny noexcept (jak naši standardní knihovnu nikdy si klade za cíl vyvolání výjimky, při zjištění non -propagate_on_container_swap bez rovná allocator nedefinované chování podmínky).Many container swap operations are now marked noexcept (as our Standard Library never intends to throw an exception when detecting the non-propagate_on_container_swap non-equal-allocator undefined behavior condition).
  • Mnoho vector<bool> operace jsou nyní označeny noexcept.Many vector<bool> operations are now marked noexcept.
  • Standardní knihovna teď bude vynucovat odpovídající allocator value_type (v C ++ 17 režimu) s výslovného nesouhlasu s únikový poklop.The Standard Library will now enforce matching allocator value_type (in C++17 mode) with an opt-out escape hatch.
  • Oprava některé podmínky, kde samoobslužné-range-insert into basic_string by promíchání obsahu řetězce.Fixed some conditions where self-range-insert into basic_string would scramble the strings contents. (Poznámka: standardní stále zakazuje automatické-range-insert into vektory.)(Note: self-range-insert into vectors is still prohibited by the Standard.)
  • basic_string::shrink_to_fit() je již nejsou ovlivněny přidělujícího modulu propagate_on_container_swap.basic_string::shrink_to_fit() is no longer affected by the allocator's propagate_on_container_swap.
  • std::decay nyní zpracovává typy abominable – funkce (například typy funkce, které jsou kvalifikovaný cv a/nebo kvalifikaci ref).std::decay now handles abominable function types (i.e. function types that are cv-qualified and/or ref-qualified).
  • Změnit direktiv použití správné rozlišování velikosti písmen a lomítka, zlepšit přenositelnost.Changed include directives to use proper case sensitivity and forward slashes, improving portability.
  • Oprava upozornění C4061 "výčet"enumerátor"v přepnutí výčtu'výčet" není explicitně zpracován popisek případu ".Fixed warning C4061 "enumerator 'enumerator' in switch of enum 'enumeration' is not explicitly handled by a case label". Toto upozornění je mimo výchozí a byla stanovena jako výjimku do standardní knihovny obecné zásady pro upozornění.This warning is off-by-default and was fixed as an exception to the Standard Library's general policy for warnings. (Standardní knihovna je /W4 vyčištění, ale nebude pokoušet o být /Wall vyčistit.(The Standard Library is /W4 clean, but does not attempt to be /Wall clean. Mnoho vypnout výchozím upozornění jsou extrémně hlučného a nejsou určeny k použití v pravidelných intervalech.)Many off-by-default warnings are extremely noisy and aren't intended to be used on a regular basis.)
  • Vylepšené std::list ladění kontroly.Improved std::list debug checks. Iterátory nyní zkontrolujte seznam operator->(), a list::unique() nyní označí iterátory jako zneplatněny.List iterators now check operator->(), and list::unique() now marks iterators as invalidated.
  • Oprava používá allocator metaprogramování v tuple.Fixed uses-allocator metaprogramming in tuple.

Výkon/propustnost opravyPerformance/throughput fixes

  • Pracoval kolem interakce s noexcept která zabránila vkládání std::atomic implementace do funkce, které používají strukturované zpracování výjimek (SEH).Worked around interactions with noexcept which prevented inlining the std::atomic implementation into functions that use Structured Exception Handling (SEH).
  • Změněné standardní knihovně poškodilo vnitřní _Deallocate() funkce optimalizace na menší kód, což umožňuje být vloženy do více míst.Changed the Standard Library's internal _Deallocate() function to optimize into smaller code, allowing it to be inlined into more places.
  • Změnit std::try_lock() nahrazujícím rekurze rozšíření balíčku.Changed std::try_lock() to use pack expansion instead of recursion.
  • Vylepšené std::lock() použití algoritmu předcházení zablokování lock() operace namísto pokryjte na try_lock() na všech zámků.Improved the std::lock() deadlock avoidance algorithm to use lock() operations instead of spinning on try_lock() on all the locks.
  • Povolené optimalizace pojmenované vrácená hodnota v system_category::message().Enabled the Named Return Value Optimization in system_category::message().
  • conjunction a disjunction nyní vytvořit instanci N + 1 typů, aniž 2 n + 2 typy.conjunction and disjunction now instantiate N + 1 types, instead of 2N + 2 types.
  • std::function už vytvoří instanci stroje podporu alokátoru pro každý typu volatelná aplikacemi, zlepšení propustnosti a snížení velikosti .obj v aplikacích, které předávají mnoho různých výrazy lambda na std::function.std::function no longer instantiates allocator support machinery for each type-erased callable, improving throughput and reducing .obj size in programs that pass many distinct lambdas to std::function.
  • allocator_traits<std::allocator> obsahuje ručně vložit std::allocator operace, snížení velikosti kódu v kódu, který komunikuje s std::allocator prostřednictvím allocator_traits pouze (to znamená, že v většinu kódu).allocator_traits<std::allocator> contains manually inlined std::allocator operations, reducing code size in code that interacts with std::allocator through allocator_traits only (that is, in most code).
  • Standardní knihovna teď zpracovává rozhraní C ++ 11 minimálních alokátorů volání allocator_traits přímo, namísto obtékání přidělujícího modulu do interní třídy _Wrap_alloc.The C++11 minimal allocator interface is now handled by the Standard Library calling allocator_traits directly, instead of wrapping the allocator in an internal class _Wrap_alloc. To snižuje velikost kód generovaný pro podpory pro allocator, zvyšuje optimalizátoru schopnost argumentovat o kontejnery standardní knihovny v některých případech a poskytuje lepší možnosti ladění (jak je vidět typ alokátoru, spíše než _Wrap_alloc<your_allocator_type> v ladicí program).This reduces the code size generated for allocator support, improves the optimizer's ability to reason about Standard Library containers in some cases, and provides a better debugging experience (as now you see your allocator type, rather than _Wrap_alloc<your_allocator_type> in the debugger).
  • Odebrat metaprogramování upravené allocator::reference, které alokátorů nejsou povoleny ve skutečnosti k přizpůsobení.Removed metaprogramming for customized allocator::reference, which allocators aren't actually allowed to customize. (Alokátory: můžete vytvářet kontejnery pomocí ukazatelů, ale ne nápadité odkazy.)(Allocators can make containers use fancy pointers but not fancy references.)
  • Front-end kompilátoru se museli k rozbalení ladění iterátorů v rozsahu smyčky, zvýšení výkonu sestavení pro ladění.The compiler front-end was taught to unwrap debug iterators in range-based for-loops, improving the performance of debug builds.
  • basic_string Interní zmenšení cestu pro shrink_to_fit() a reserve() již není v cestě přerozdělení operace, snížení velikosti kódu pro všechny členy mutující.The basic_string internal shrink path for shrink_to_fit() and reserve() is no longer in the path of reallocating operations, reducing code size for all mutating members.
  • basic_string Interní růst cestu již není v cestě shrink_to_fit().The basic_string internal grow path is no longer in the path of shrink_to_fit().
  • basic_string Mutující operace jsou nyní promítnout do Rychlá cesta přidělení a přidělení pomalou cestou funkce, díky tomu je vyšší pravděpodobnost pro běžné bez opětovné se nedá vložit do volající.The basic_string mutating operations are now factored into non-allocating fast path and allocating slow path functions, making it more likely for the common no-reallocate case to be inlined into callers.
  • basic_string Mutace operace nyní konstrukce nevyčerpané vyrovnávací paměti v požadovaném stavu, spíše než změnu velikosti na místě.The basic_string mutating operations now construct reallocated buffers in the desired state rather than resizing in place. Například vkládání na začátku řetězce teď přesune obsah po vložení právě jednou (mimo provoz nebo na nově přidělenou vyrovnávací paměť), namísto dvakrát v případě reallocating (nově přidělené vyrovnávací paměti a potom dolů).For example, inserting at the beginning of a string now moves the content after the insertion exactly once (either down or to the newly allocated buffer), instead of twice in the reallocating case (to the newly allocated buffer and then down).
  • Operace volání standardní knihovny jazyka C v <řetězec> nyní do mezipaměti errno adresu odebrat opakované interakce s TLS.Operations calling the C standard library in <string> now cache the errno address to remove repeated interaction with TLS.
  • Zjednodušená is_pointer implementace.Simplified the is_pointer implementation.
  • Dokončení změn na základě funkce sfinae u výrazů k struct a void_t– na základě.Finished changing function-based Expression SFINAE to struct and void_t-based.
  • Algoritmy standardní knihovny se postincrementing iterátory.Standard Library algorithms now avoid postincrementing iterators.
  • Oprava zkrácení upozornění při použití 32-bit alokátorů v 64bitových systémech.Fixed truncation warnings when using 32-bit allocators on 64-bit systems.
  • std::vector Přesunutí přiřazení je teď mnohem efektivnější v případě jiných POCMA rovná allocator opětovným použitím vyrovnávací paměti, pokud je to možné.std::vector move assignment is now more efficient in the non-POCMA non-equal-allocator case, by reusing the buffer when possible.

Lepší čitelnost a další vylepšeníReadability and other improvements

  • Standardní knihovna teď používá C ++ 14 constexpr bezpodmínečně, namísto podmíněně definovaná makra.The Standard Library now uses C++14 constexpr unconditionally, instead of conditionally-defined macros.
  • Standardní knihovna teď používá šablony aliasů interně.The Standard Library now uses alias templates internally.
  • Standardní knihovna teď používá nullptr interně, nikoli z nullptr_t{}.The Standard Library now uses nullptr internally, instead of nullptr_t{}. (Interní využití NULL byla odstraněna.(Internal usage of NULL has been eradicated. Interní využití 0 jako null právě prochází čištěním postupně.)Internal usage of 0-as-null is being cleaned up gradually.)
  • Standardní knihovna teď používá std::move() interně, namísto stylistically zneužití std::forward().The Standard Library now uses std::move() internally, instead of stylistically misusing std::forward().
  • Změnit static_assert(false, "message") k #error message.Changed static_assert(false, "message") to #error message. To zlepšuje diagnostiky kompilátoru, protože #error okamžitě přeruší kompilaci.This improves compiler diagnostics because #error immediately stops compilation.
  • Standardní knihovna již označí funkce jako __declspec(dllimport).The Standard Library no longer marks functions as __declspec(dllimport). Moderní linkeru technologií už nevyžaduje to.Modern linker technology no longer requires this.
  • Extrahované sfinae u pro výchozí argumenty šablony, což snižuje nepořádku v porovnání s návratové typy a typy argumentů funkce.Extracted SFINAE to default template arguments, which reduces clutter compared to return types and function argument types.
  • Ladění se změnami <náhodné> teď použít obvyklé výbavu standardní knihovny, místo vnitřní funkce _Rng_abort() kterou volat fputs() k stderr.Debug checks in <random> now use the Standard Library's usual machinery, instead of the internal function _Rng_abort() which called fputs() to stderr. Implementace této funkce je se uchovávají po dobu binární kompatibilitu, ale byla odebrána v příští verzi binární nekompatibilní standardní knihovny.This function's implementation is being retained for binary compatibility, but has been removed in the next binary-incompatible version of the Standard Library.

Visual Studio 2017 verze 15.5Visual Studio 2017 version 15.5

Některé funkce standardní knihovny byly přidány, zastaralé nebo odebrání v souladu s standard C ++ 17.Several Standard Library features have been added, deprecated or removed in accordance with the C++17 standard. Další informace najdete v části vylepšení shody C++ v sadě Visual Studio.For more information see C++ conformance improvements in Visual Studio.

Nové seznámit s experimentálními funkcemiNew experimental features

  • Experimentální podporu pro následující paralelní algoritmy:Experimental support for the following parallel algorithms:
    • all_of
    • any_of
    • for_each
    • for_each_n
    • none_of
    • reduce
    • replace
    • replace_if
    • sort
  • Podpisy pro následující paralelní algoritmy jsou přidána ale neparalelizovaných v tuto chvíli; profilace jsme si ukázali, žádné výhody v paralelním zpracováním algoritmy, které jsou pouze přesunutí nebo permute – elementy:The signatures for the following parallel algorithms are added but not parallelized at this time; profiling showed no benefit in parallelizing algorithms that only move or permute elements:
    • copy
    • copy_n
    • fill
    • fill_n
    • move
    • reverse
    • reverse_copy
    • rotate
    • rotate_copy
    • swap_ranges

Výkon opravy a vylepšeníPerformance fixes and improvements

  • basic_string<char16_t> Teď provede stejné memcmp, memcpya podobné optimalizace, které basic_string<wchar_t> zaujme.basic_string<char16_t> now engages the same memcmp, memcpy, and similar optimizations that basic_string<wchar_t> engages.
  • Optimalizace omezení, která mu ukazatelů na funkce nebudou vloženy vystavené naše "vyhnout kopírování funkce" pracovat v sadě Visual Studio 2015 Update 3 byla pracoval, obnovení výkon lower_bound(iter, iter, function pointer).An optimizer limitation which prevented function pointers from being inlined exposed by our "avoid copying functions" work in Visual Studio 2015 Update 3 has been worked around, restoring performance of lower_bound(iter, iter, function pointer).
  • Režie pro iterační ladění vaší objednávky ověření vstupy includes, set_difference, set_symmetric_difference, a set_union byla snížena rozbalení iterátory před vrácením se změnami pořadí.The overhead of iterator debugging's order verification of inputs to includes, set_difference, set_symmetric_difference, and set_union was reduced by unwrapping iterators before checking order.
  • std::inplace_merge Nyní přeskočí elementy, které jsou už v umístění.std::inplace_merge now skips over elements that are already in position.
  • Vytváření std::random_device už sestaví a potom zničí std::string.Constructing std::random_device no longer constructs and then destroys a std::string.
  • std::equal a std::partition měl dělení na vlákna jump optimalizace průchodu, což jim porovnávání iterátoru.std::equal and std::partition had a jump-threading optimization pass which saves an iterator comparison.
  • Když std::reverse ukazatele je předaný pro triviálně kopírovatelné T, odešle teď do rukou psaný vektorizovaných implementace.When std::reverse is passed pointers to trivially copyable T, it will now dispatch to a handwritten vectorized implementation.
  • std::fill, std::equal, a std::lexicographical_compare byly museli jak provést odeslání memset a memcmp pro std::byte a gsl::byte (a ostatní char jako výčty a výčet tříd).std::fill, std::equal, and std::lexicographical_compare were taught how to dispatch to memset and memcmp for std::byte and gsl::byte (and other char-like enums and enum classes). Všimněte si, že std::copy odešle zprávu pomocí is_trivially_copyable a proto nebylo potřeba žádné změny.Note that std::copy dispatches using is_trivially_copyable and thus didn't need any changes.
  • Standardní knihovna již nebude obsahovat žádné prázdné závorky destruktory, jehož jediným chování bylo zajistit typy bez triviálně zničitelné.The Standard Library no longer contains empty-braces destructors whose only behavior was to make types non-trivially-destructible.

Řeší správnost v sadě Visual Studio 2017 verze 15.5Correctness fixes in Visual Studio 2017 version 15.5

  • std::partition nyní volání časy predikátu N místo N + 1 časy jako standardní vyžaduje.std::partition now calls the predicate N times instead of N + 1 times, as the standard requires.
  • Pokusy o statické objekty magic ve verzi 15.3, aby byl opraven ve verzi 15.5.Attempts to avoid magic statics in version 15.3 have been repaired in version 15.5.
  • std::atomic<T> už nevyžaduje T jako výchozí constructible.std::atomic<T> no longer requires T to be default constructible.
  • Haldy algoritmy, které už logaritmické nespěchejte provést kontrolní výraz lineárním čase, že vstup je ve skutečnosti haldu Pokud je povolená pro iterační ladění.Heap algorithms that take logarithmic time no longer do a linear time assertion that the input is in fact a heap when iterator debugging is enabled.
  • __declspec(allocator) je teď pro C1XX pouze, aby se zabránilo upozornění Clang, který nerozumí tento declspec chráněné.__declspec(allocator) is now guarded for C1XX only, to prevent warnings from Clang which doesn't understand this declspec.
  • basic_string::npos je teď dostupná jako časovou konstantou kompilace.basic_string::npos is now available as a compile time constant.
  • std::allocator v C ++ 17 režimu je větší než nyní správně zpracovává přidělení nadbytečně zarovnané typy, typy to znamená, jejichž zarovnání max_align_t, pokud zakázal /Zc:alignedNew-.std::allocator in C++17 mode now properly handles allocation of over-aligned types, that is, types whose alignment is greater than max_align_t, unless disabled by /Zc:alignedNew-. Například vektory objektů s 16 nebo 32bajtové zarovnání budou nyní správně zarovnané SSE a AVX pokyny.For example, vectors of objects with 16 or 32-byte alignment will now be properly aligned for SSE and AVX instructions.

Visual Studio 2017 verze 15.6Visual Studio 2017 version 15.6

  • <memory_resource ><memory_resource>
  • Knihovna základy V1Library Fundamentals V1
  • Odstraňuje se přiřazení polymorphic_allocatorDeleting polymorphic_allocator assignment
  • Zlepšení odvození argumentu šablony třídyImproving class template argument deduction

Visual Studio 2017 verze 15.7Visual Studio 2017 version 15.7

  • podporu pro paralelní algoritmy, už nejsou experiementalsupport for parallel algorithms is no longer experiemental
  • novou implementaci <filesystem >a new implementation of <filesystem>
  • základní řetězec převody (částečná podpora)elementary string conversions (partial)
  • std::launder()std::launder()
  • std::Bytestd::byte
  • hypot(x,y,z)hypot(x,y,z)
  • jak se vyhnout zbytečným decayavoiding unnecessary decay
  • speciální matematické funkcemathematical special functions
  • char_traits constexpr.constexpr char_traits
  • Průvodce dedukcí pro STLdeduction guides for STL

Zobrazit shoda jazyka Visual C++ Další informace.See Visual C++ language conformance for more information.

Další knihovnyOther Libraries

Podpora pro Open source knihovnyOpen source library support

Vcpkg je nástroj příkazového řádku open source, který výrazně zjednodušuje proces získání a vytvoření statické knihovny opensourcového jazyka C++ a knihovny DLL v sadě Visual Studio.Vcpkg is an open-source command line tool that greatly simplifies the process of acquiring and building open source C++ static libs and DLLS in Visual Studio. Další informace najdete v tématu vcpkg: Správce balíčků pro C++.For more information, see vcpkg: A package manager for C++.

Visual Studio 2017 verze 15.5:Visual Studio 2017 version 15.5:

Sada SDK CPPRest 2.9.0CPPRest SDK 2.9.0

CPPRestSDK multiplatformní webového rozhraní API jazyka C++, byla aktualizována na verzi 2.9.0.The CPPRestSDK, a cross-platform web API for C++, has been updated to version 2.9.0. Další informace najdete v tématu CppRestSDK 2.9.0 je k dispozici na Githubu.For more information, see CppRestSDK 2.9.0 is available on GitHub.

ATLATL

  • Ještě další sada oprav neshod vyhledávání názvůYet another set of name-lookup conformance fixes
  • Existující konstruktory přesunutí a operátory přiřazení jsou teď správně označené jako non-throwing. přesunutí a operátoryExisting move constructors and move assignment operators are now properly marked as non-throwing
  • Zrušení potlačení platný upozornění c4640 týkajícího vláknově bezpečné inicializace místních statik v atlstr.hUn-suppress valid warning C4640 about thread safe init of local statics in atlstr.h
  • Vláknově bezpečnou inicializaci místních statik byla v sadě nástrojů XP automaticky vypnutá při [použití ATL a vytváření knihovny DLL].Thread Safe Initialization of local statics was automatically turned off in the XP toolset when [using ATL AND building a DLL]. To již neplatí.This is no longer the case. Můžete přidat /Zc: threadsafeinit v nastavení projektu, pokud vlákno je žádoucí bezpečnou inicializaci vypnout.You can add /Zc:threadSafeInit- in your Project settings if having thread safe initialization off is desired.

Modul runtime Visual C++Visual C++ runtime

  • Nové záhlaví "cfguard.h" pro symboly ochrany toku provádění.New header "cfguard.h" for Control Flow Guard symbols.

C++ IDEC++ IDE

  • Výkon při změně konfigurace je teď vyšší u nativních projektů C++ a mnohem vyšší u projektů C++/CLI.Configuration change performance is now better for C++ native projects and much better for C++/CLI projects. Pokud se konfigurace řešení aktivuje poprvé, bude to teď rychlejší, přičemž všechny následné aktivace této konfigurace řešení budou prakticky okamžité.When a solution configuration is activated for the first time it will now be faster and all subsequent activations of this solution configuration will be almost instantaneous.

Visual Studio 2017 verze 15.3:Visual Studio 2017 version 15.3:

  • Několik průvodců projektu a kódu je přepsaných ve stylu dialogu podpisu.Several project and code wizards have been rewritten in the signature dialog style.
  • Přidejte třídu teď přímo spustí průvodce Přidat třídu.Add Class now launches the Add Class wizard directly. Všechny ostatní položky, které byly dříve tady, jsou teď k dispozici v rámci Přidat > Nová položka.All of the other items that were previously here are now available under Add > New Item.
  • Projekty Win32 jsou teď v Windows Desktop kategorii nový projekt dialogového okna.Win32 projects are now under the Windows Desktop category in the New Project dialog.
  • Konzoly Windows a aplikace klasické pracovní plochy šablony teď vytvoří projekty bez zobrazení průvodce.The Windows Console and Desktop Application templates now create the projects without displaying a wizard. Je tu nový desktopový Průvodce pro Windows v rámci stejné kategorie, která zobrazí stejné možnosti jako původní Konzolová aplikace Win32 průvodce.There's a new Windows Desktop Wizard under the same category that displays the same options as the old Win32 Console Application wizard.

Visual Studio 2017 verze 15.5:Visual Studio 2017 version 15.5:

Několik operací v jazyce C++, které používají modul IntelliSense pro refaktoring a navigace v kódu spusťte mnohem rychleji.Several C++ operations that use the IntelliSense engine for refactoring and code navigation run much faster. Tato čísla jsou založeny na Visual Studio chromu řešení s projekty 3500:The following numbers are based on the Visual Studio Chromium solution with 3500 projects:

FunkceFeature Zlepšení výkonuPerformance Improvement
přejmenováníRename 5.3 x5.3x
Změnit signaturuChange Signature 4.5 x4.5x
Najít všechny odkazyFind All References 4.7 x4.7x

Jazyk C++ nyní podporuje Ctrl + kliknutí přejít k definici, usnadňuje navigace myši do definic.C++ now supports Ctrl+Click Go To Definition, making mouse navigation to definitions easy. Vizualizér struktur z této sady nástrojů Productivity Power Tools je nyní také součástí produktu ve výchozím nastavení.The Structure Visualizer from the Productivity Power Tools pack is now also included in the product by default.

IntelliSenseIntelliSense

  • Ve výchozím nastavení je nyní používán nový databázový stroj využívající SQLite.The new SQLite-based database engine is now being used by default. Tím se urychlí databázové operace jako přejít k definici a najít všechny odkazya výrazně se zkrátí doba analýzy počátečního řešení.This will speed up database operations like Go To Definition and Find All References, and will significantly improve initial solution parse time. Nastavení se přesunulo do nástroje > Možnosti > textový Editor > C/C++ > Upřesnit (dříve bylo pod... C/C++ | Experimentální).The setting has been moved to Tools > Options > Text Editor > C/C++ > Advanced (it was formerly under ...C/C++ | Experimental).

  • 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.We've improved IntelliSense performance on projects and files not using precompiled headers - an Automatic Precompiled Header will be created for headers in the current file.

  • Přidali jsme do seznamu chyb filtrování a nápovědu k chybám technologie IntelliSense.We've added error filtering and help for IntelliSense errors in the error list. Kliknutí na sloupec s chybami teď umožní je filtrovat.Clicking on the error column now allows for filtering. Kromě toho kliknutím na konkrétní chyby nebo stisknutím klávesy F1 spustíte online vyhledávání chybové zprávy.Also, clicking on the specific errors or pressing F1 will launch an online search for the error message.

    Seznam chybError List

    Filtrovaný seznam chybError List Filtered

  • Přidali jsme možnost filtrovat položky seznamu členů podle typu.Added the ability to filter Member List items by kind.

    Filtrování seznamu členůMember List Filtering

  • Přidali jsme novou experimentální funkci prediktivní IntelliSense, která poskytuje kontextově závislé filtrování toho, co se zobrazuje v seznamu členů.Added a new experimental Predictive IntelliSense feature that provides contextually-aware filtering of what appears in the Member List. Zobrazit vylepšení IntelliSense pro C++ – prediktivní IntelliSense a filtrováníSee C++ IntelliSense Improvements - Predictive IntelliSense & Filtering

  • Najít všechny odkazy (Shift + F12) teď pomáhá vám snadno dostanete, i v komplexních základů kódu.Find All References (Shift+F12) now helps you get around easily, even in complex codebases. Poskytuje pokročilé seskupování, filtrování, řazení, hledání v rámci výsledků a (pro některé jazyky) zabarvení, abyste se mohli pochopili, že vaše odkazy.It provides advanced grouping, filtering, sorting, searching within results, and (for some languages) colorization, so you can get a clear understanding of your references. Nové uživatelské rozhraní jazyka C++, obsahuje informace o tom, jestli jsme se čtení z nebo zápis do proměnné.For C++, the new UI includes information about whether we are reading from or writing to a variable.
  • 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á.The Dot-to-Arrow IntelliSense feature has been moved from experimental to advanced, and is now enabled by default. Funkce editoru rozbalení oborů a rozbalení priorit také byly přesunuté z experimentálních na Pokročilé.The editor features Expand Scopes and Expand Precedence have also been moved from experimental to advanced.
  • Funkce experimentálního refaktoringu změnit signaturu a extrahovat funkci jsou teď dostupné ve výchozím nastavení.The experimental refactoring features Change Signature and Extract Function are now available by default.
  • Experimentální funkce, které je "Rychleji projektu zatížení" pro projekty C++.The experimental 'Faster project load' feature for C++ projects. Při příštím otevření se projekt jazyka C++ zavede se rychleji a potom se bude zavádět skutečně rychle.The next time you open a C++ project it will load faster, and the time after that it will load really fast!
  • Některé z těchto funkcí jsou společné pro ostatní jazyky a některé jsou specifické pro C++.Some of these features are common to other languages, and some are specific to C++. Další informace o těchto nových funkcích najdete v tématu oznamujeme vydání sady Visual Studio "15".For more information about these new features, see Announcing Visual Studio "15".

1027 Visual Studio verze 15.7: přidána podpora pro ClangFormat.Visual Studio 1027 version 15.7: Support added for ClangFormat. Další informace najdete v tématu podporu pro ClangFormat v sadě Visual Studio 2017.For more information, see ClangFormat Support in Visual Studio 2017.

Projekty MSBuild bez pomocí otevřít složkuNon-MSBuild projects with Open Folder

Visual Studio 2017 zavádí otevřít složku funkci, která umožňuje kód, vytvářet a ladit ve složce obsahující zdrojový kód bez nutnosti vytvářet jakékoli řešení nebo projektů.Visual Studio 2017 introduces the Open Folder feature, which enables you to code, build and debug in a folder containing source code without the need to create any solutions or projects. Díky tomu je mnohem jednodušší, abyste mohli začít se sadou Visual Studio i v případě, že váš projekt není projektem založené na MSBuild.This makes it much simpler to get started with Visual Studio even if your project is not an MSBuild-based project. S otevřít složku získáte přístup k výkonné kódu principy, úpravy, sestavování a ladění funkcí, které již poskytuje Visual Studio pro projekty MSBuild.With Open Folder you get access to the powerful code understanding, editing, building and debugging capabilities that Visual Studio already provides for MSBuild projects. Další informace najdete v tématu projekty otevřít složku v jazyce Visual C++.For more information, see Open Folder projects in Visual C++.

  • Vylepšení prostředí Otevřít složkuImprovements to the Open Folder experience. Přizpůsobte si prostředí pomocí tyto soubory .json:You can customize the experience through these .json files:
    • CppProperties.json použijte k přizpůsobení technologie IntelliSense a prostředí procházení.CppProperties.json to customize the IntelliSense and browsing experience.
    • Tasks.json použijte k přizpůsobení kroků sestavení.Tasks.json to customize the build steps.
    • Launch.json použijte k přizpůsobení prostředí ladění.Launch.json to customize the debugging experience.

Visual Studio 2017 verze 15.3:Visual Studio 2017 version 15.3:

  • Vylepšená podpora pro alternativní kompilátory a prostředí sestavení, jako je například MinGW a Cygwin.Improved support for alternative compilers and build environments such as MinGW and Cygwin. Další informace najdete v tématu pomocí MinGW a Cygwin pomocí jazyka Visual C++ a otevřít složku.For more information, see Using MinGW and Cygwin with Visual C++ and Open Folder.
  • Byla přidána podpora pro definování proměnných prostředí určených pro konfigurace a globální CppProperties.json a CMakeSettings.json.Added support to define global and configuration-specific environment variables in CppProperties.json and CMakeSettings.json. Tyto proměnné prostředí můžete využívat v konfiguracích ladění definovaných v souboru launch.vs.json a úkolech v tasks.vs.json.These environment variables can be consumed by debug configurations defined in launch.vs.json and tasks in tasks.vs.json. Další informace najdete v tématu přizpůsobení prostředí pomocí Visual C++ a otevřít složku.For more information, see Customizing your Environment with Visual C++ and Open Folder.
  • Vylepšená podpora pro generátor Ninja CMake, včetně možnosti snadno cílit na 64bitové platformy.Improved support for CMake's Ninja generator, including the ability to easily target 64-bit platforms.

Podpora CMake prostřednictvím funkce Otevřít složkuCMake support via Open Folder

Visual Studio 2017 zavádí podporu pro práci s projekty CMake bez nutnosti dalších souborech projektu MSBuild (.vcxproj).Visual Studio 2017 introduces support for using CMake projects without converting to MSBuild project files (.vcxproj). Další informace najdete v tématu projekty CMake v jazyce Visual C++.For more information, see CMake projects in Visual C++. Otevírání projektů CMake s otevřít složku automaticky nakonfiguruje prostředí pro úpravy, sestavování a ladění C++.Opening CMake projects with Open Folder automatically configures the environment for C++ editing, building and debugging.

  • Technologie IntelliSense jazyka C++ funguje bez nutnosti vytvoření souboru CppProperties.json v kořenové složce.C++ IntelliSense works without the need to create a CppProperties.json file in the root folder. Navíc jsme přidali novou rozevírací nabídku, která uživatelům umožňuje snadno přepínat mezi konfiguracemi poskytovanými soubory CMake a CppProperties.json.Along with this, we've added a new dropdown to allow users to easily switch between configurations provided by CMake and CppProperties.json files.

  • Prostřednictvím souboru CMakeSettings.json, který je umístěný ve stejné složce jako soubor CMakeLists.txt, se podporuje další konfigurace.Further configuration is supported via a CMakeSettings.json file that sits in the same folder as the CMakeLists.txt file.

    Otevřít složku – CMakeCmake Open Folder

Visual Studio 2017 verze 15.3: přidána podpora pro generátor CMake Ninja.Visual Studio 2017 version 15.3: Support added for the CMake Ninja generator.

Visual Studio 2017 verze 15.5: přidané pro import existujících CMake ukládá do mezipaměti.Visual Studio 2017 version 15.5: Support added for importing existing CMake caches.

Visual Studio 2017 verze 15.7: přidané for CMake 3.11, analýza kódu v projektech CMake, zaměřuje na zobrazení v Průzkumníku řešení, možnosti pro mezipaměť, kompilaci a generování jednoho souboru.Visual Studio 2017 version 15.7: Support added for CMake 3.11, code analysis in CMake projects, Targets view in Solution Explorer, options for cache generation, and single file compilation. Další informace najdete v tématu podpora CMake v sadě Visual Studio a projekty CMake v jazyce Visual C++.For more information, see CMake Support in Visual Studio and CMake projects in Visual C++.

Vývoj pro plochu Windows v C++Windows desktop development with C++

Při instalaci původní úlohy pro C++ teď poskytujeme podrobnější prostředí instalace.We now provide a more granular installation experience for installing the original C++ workload. Přidali jsme volitelné součásti, které vám umožní vybrat a nainstalovat jen ty nástroje, které potřebujete.We have added selectable components that enable you to install just the tools that you need. Všimněte si, že uvedené velikosti instalace součástí uvedené v uživatelském rozhraní instalačního programu nejsou přesné a podceňují skutečnou celkovou velikost.Please note that the indicated installation sizes for the components listed in the installer UI are not accurate and underestimate the total size.

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.To successfully create Win32 projects in the C++ desktop workload, you must install both a toolset and a Windows SDK. Instalace doporučených (vybraných) komponent nástrojů pro VC ++ 2017 v141 (x86, x64) a Windows 10 SDK (10.0.nnnnn) zajišťuje, bude to fungovat.Installing the recommended (selected) components VC++ 2017 v141 toolset (x86, x64) and Windows 10 SDK (10.0.nnnnn) ensures this will work. Pokud nebudou potřebné nástroje nainstalované, projekty se nevytvoří úspěšně a průvodce přestane reagovat.If the necessary tools are not installed, projects will not be created successfully and the wizard will hang.

Visual Studio 2017 verze 15.5:Visual Studio 2017 version 15.5:

(Dříve dostupné jako samostatný produkt) Visual C++ Build tools jsou nyní zahrnuty jako úloha v instalačním programu sady Visual Studio.The Visual C++ Build tools (previously available as a standalone product) are now included as a workload in the Visual Studio Installer. Tato úloha se nainstaluje jenom nástroje potřebné k sestavení projektů C++ bez nutnosti instalace integrovaném vývojovém prostředí sady Visual Studio.This workload installs only the tools required to build C++ projects without installing the Visual Studio IDE. Sady nástrojů verze 141 i v140 jsou zahrnuty.Both the v140 and v141 toolsets are included. Sadu nástrojů verze 141 obsahuje nejnovější vylepšení v sadě Visual Studio 2017 verze 15.5.The v141 toolset contains the lastest improvements in Visual Studio 2017 version 15.5. Další informace najdete v tématu Visual Studio Build Tools nyní zahrnují VS2017 a sady nástrojů MSVC VS2015.For more information, see Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets.

Vývoj pro Linux v C++Linux development with C++

Oblíbené rozšíření Visual C++ for Linux Development je teď součástí sady Visual Studio.The popular extension Visual C++ for Linux Development is now part of 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.This installation provides everything you need to develop and debug C++ applications running on a Linux environment.

Visual Studio 2017 verze 15.2:Visual Studio 2017 version 15.2:

Vylepšení byly provedeny v kódu pro různé platformy pro sdílení obsahu a typu vizualizace.Improvements have been made in cross-platform code sharing and type visualization. Další informace najdete v tématu vylepšení Linux C++ pro různé platformy sdílení kódu a typ vizualizace.For more information, see Linux C++ improvements for cross-platform code sharing and type visualization.

Visual Studio 2017 verze 15.5:Visual Studio 2017 version 15.5:

  • Přidána podpora pro Linux úloha rsync jako alternativu k sftp pro synchronizaci souborů do vzdáleného počítače s Linuxem.The Linux workload has added support for rsync as an alternative to sftp for synchronizing files to remote Linux machines.
  • Byla přidána podpora pro různé cílení na ARM mikrokontrolerů po kompilaci.Support is added for cross compilation targeting ARM microcontrollers. Chcete-li povolit v instalaci, zvolte vývoj pro Linux v C++ úlohy a vyberte možnost pro vložené a IoT vývoj.To enable this in the installation, choose the Linux development with C++ workload and select the option for Embedded and IoT Development. To přidá kolekce gcc technologie ARM cross tools kompilace a zkontrolujte instalaci.This adds the ARM GCC cross compilation tools and Make to your installation. Další informace najdete v tématu ARM GCC křížové kompilace v sadě Visual Studio.For more information, see ARM GCC Cross Compilation in Visual Studio.
  • Byla přidána podpora pro CMake.Support added for CMake. Teď můžete pracovat na svém stávajícím základu CMake kódu bez nutnosti převádět na projekt sady Visual Studio.You can now work on your existing CMake code base without having to convert it to a Visual Studio project. Další informace najdete v tématu konfigurace projektu Linux CMake.For more information, see Configure a Linux CMake Project.
  • Byla přidána podpora pro spouštění vzdálené úlohy.Support added for running remote tasks. Díky této funkci můžete spouštět jakékoli příkazy ve vzdáleném systému, který je definován v sadě Visual Studio Connection Manager.This capability allows you to run any command on a remote system that is defined in Visual Studio’s Connection Manager. Vzdálené úlohy také poskytují možnost kopírování souborů do vzdáleného systému.Remote tasks also provide the capability to copy files to the remote system. Další informace najdete v tématu konfigurace projektu Linux CMake.For more information, see Configure a Linux CMake Project.

Visual Studio 2017 verze 15.7:Visual Studio 2017 version 15.7:

Vývoj her v C++Game development with C++

Využijte naplno potenciál C++ k vytváření profesionálních her využívajících technologii DirectX nebo Cocos2d.Use the full power of C++ to build professional games powered by DirectX or Cocos2d.

Vývoj mobilních aplikací pomocí C++ (Android a iOS)Mobile development with C++ (Android and iOS)

Mobilní aplikace teď můžete vytvářet a ladit pomocí sady Visual Studio, která se umí zaměřit i na Android a iOS.You can now create and debug mobile apps using Visual Studio that can target Android and iOS.

Univerzální aplikace pro WindowsUniversal Windows Apps

C++ je volitelnou součástí úlohy Universal Windows App.C++ comes as an optional component for the Universal Windows App workload. Upgrade projektů C++ se v tuto chvíli musí provést ručně.Upgrading C++ projects currently must be done manually. Pokud v sadě Visual Studio 2017 otevřete projekt UPW cílený na verzi 140 a nemáte nainstalovanou sadu Visual Studio 2015, musíte na stránkách vlastností projektu vybrat sadu nástrojů verze 141.If you open a v140-targeted UWP project in Visual Studio 2017, you need to select the v141 platform toolset in the project property pages if you do not have Visual Studio 2015 installed.

Nové možnosti jazyka C++ na univerzální platformu Windows (UPW)New options for C++ on Universal Windows Platform (UWP)

Teď máte nové možnosti pro zápis a balení aplikací pro univerzální platformu Windows a Windows Store v jazyce C++: přemostění na Desktop infrastruktury můžete zabalit existující aplikace klasické pracovní plochy nebo objekt modelu COM pro nasazení prostřednictvím Windows Store nebo prostřednictvím stávajících prodejních kanálů prostřednictvím zkušební načtení.You now have new options for writing and packaging C++ applications for the Universal Windows Platform and the Windows Store: You can use the Desktop Bridge infrastructure to package your existing desktop application or COM object for deployment through the Windows Store or through your existing channels via side-loading. Nové funkce ve Windows 10 vám umožňují přidat funkce UPW do aplikace klasické pracovní plochy různými způsoby.New capabilities in Windows 10 enable you to add UWP functionality to your desktop application in various ways. Další informace najdete v tématu přemostění na Desktop.For more information, see Desktop Bridge.

Visual Studio 2017 verze 15.5: A projekt Windows Application Packaging šablona projektu se přidá, což výrazně zjednodušuje práci při vytváření balíčků aplikací klasické pracovní plochy s využitím přemostění na Desktop.Visual Studio 2017 version 15.5: A Windows Application Packaging Project project template is added which greatly simplifies the work of packaging desktop applications with using Desktop Bridge. Je k dispozici v soubor | Nové | Projekt | Instalaci | Visual C++ | Universal Windows Platform.It is available under File | New | Project | Installed | Visual C++ | Universal Windows Platform. Další informace najdete v tématu balíček aplikace pomocí sady Visual Studio (přemostění na Desktop).For more information, see Package an app by using Visual Studio (Desktop Bridge).

Pokud zapisujete nový kód, můžete nyní použít C + +/ WinRT, standardní projekce jazyka C++ prostředí Windows runtime implementována pouze v souborech hlaviček.When writing new code, you can now use C++/WinRT, a standard C++ language projection for the Windows Runtime implemented solely in header files. Umožňuje oba Autor a používání rozhraní API Windows Runtime pomocí jakýkoli standardům kompilátor jazyka C++.It allows you to both author and consume Windows Runtime APIs using any standards-compliant C++ compiler. C + +/ WinRT je navržené pro poskytování vývojáře v jazyce C++ s přístupem k prvotřídní moderní rozhraní Windows API.C++/WinRT is designed to provide C++ developers with first-class access to the modern Windows API. Další informace najdete v tématu C + +/ WinRT dostupný na Githubu.For more information, see C++/WinRT Available on GitHub.

Od verze sestavení 17025 sady Windows SDK Insider Preview, C + +/ WinRT je součástí sady Windows SDK.As of build 17025 of the Windows SDK Insider Preview, C++/WinRT is included in the Windows SDK. Další informace najdete v tématu C + +/ WinRT je nyní zahrnutá sady Windows SDK.For more information, see C++/WinRT is now included the Windows SDK.

Sada nástrojů platformy clang/C2Clang/C2 platform toolset

Sada nástrojů Clang/C2, která se dodává s Visual Studio 2017 teď podporuje /bigobj přepnout, což je zásadní pro sestavování rozsáhlých projektů.The Clang/C2 toolset that ships with Visual Studio 2017 now supports the /bigobj switch, which is crucial for building large projects. Zahrnuje také několik důležitých oprav chyb, jak ve front-endu, tak v back-endu kompilátoru.It also includes several important bug fixes, both in the front-end and the back-end of the compiler.

Analýza kódu C++C++ code analysis

Se sadou Visual Studio se nyní distribuují moduly pro kontrolu jádra C++, které vynucují pokyny pro jádro C++.The C++ Core Checkers for enforcing the C++ Core Guidelines are now distributed with Visual Studio. Stačí tyto moduly pro kontrolu v povolit rozšířeními pro analýzu kódu stránky v stránky vlastností projektu a rozšíření se zahrnou spouštění analýz kódu.Simply enable the checkers in the Code Analysis Extensions page in the project's property pages and the extensions will be included when you run code analysis. Další informace najdete v tématu pomocí tyto moduly pro kontrolu podle dokumentu C++ Core Guidelines.For more information, see Using the C++ Core Guidelines checkers.

CppCoreCheckCppCoreCheck

Visual Studio 2017 verze 15.3: Přidaná podpora pro pravidla týkající se správy prostředků.Visual Studio 2017 version 15.3: Support added for rules related to resource management.

Visual Studio 2017 verze 15.5: nové C++ Core Guidelines kontroly se týkají správnosti chytrých ukazatelů, správného použití globálních inicializátorů a označování použití konstruktorů, jako je goto a chybný přetypování.Visual Studio 2017 version 15.5: New C++ Core Guidelines checks cover smart pointer correctness, correct use of global initializers, and flagging uses of constructs like goto and bad casts.

Některá čísla upozornění, která najdete v 15.3, už nejsou k dispozici v 15.5.Some warning numbers you may find in 15.3 are no longer available in 15.5. Tato upozornění byla nahrazena specifičtějšími kontrolami.These warnings were replaced with more specific checks.

Visual Studio 2017 verze 15.6:Visual Studio 2017 version 15.6:
Byla přidána podpora pro jeden soubor analýzy a vylepšení analýzy výkonu za běhu.Support added for single-file analysis, and improvements in analysis run-time performance. Další informace najdete v tématu vylepšení statické analýzy C++ pro Visual Studio 2017 15.6 Preview 2For more information, see C++ Static Analysis Improvements for Visual Studio 2017 15.6 Preview 2

Visual Studio 2017 verze 15.7:Visual Studio 2017 version 15.7:

Testování jednotekUnit testing

Visual Studio 2017 verze 15.5:Visual Studio 2017 version 15.5:

Adaptér Google Test a Boost.Test adaptér jsou teď k dispozici jako součásti Desktop Development with C++ pracovního vytížení a jsou integrované s Průzkumník testů.Google Test Adapter and Boost.Test Adapter are now available as components of the Desktop Development with C++ workload, and are integrated with Test Explorer. Přidá se CTest podporu pro projekty Cmake (pomocí otevřít složku), i když plnou integraci s Průzkumník testů ještě není k dispozici.CTest support is added for Cmake projects (using Open Folder) although full integration with Test Explorer is not yet available. Další informace najdete v tématu zápis testů jednotek pro C/C++.For more information, see Writing unit tests for C/C++.

Visual Studio 2017 verze 15.6:Visual Studio 2017 version 15.6:

  • Byla přidána podpora pro Boost.Test podpora dynamických knihoven.Support added for Boost.Test dynamic library support.
  • Šablony položek Boost.Test je teď k dispozici v integrovaném vývojovém prostředí.A Boost.Test item template is now available in the IDE.

Další informace najdete v tématu Boost.Test Unit Testing: Podpora dynamických knihoven a nové šablony položky.For more information, see Boost.Test Unit Testing: Dynamic Library support and New Item Template.

Visual Studio 2017 verze 15.7:Visual Studio 2017 version 15.7:

Funkce CodeLens podporována pro projekty testů jednotek C++ přidat.CodeLens supported added for C++ unit test projects. Další informace najdete v tématu uvedení funkce CodeLens pro testování částí C++.For more information, see Announcing CodeLens for C++ Unit Testing.

Diagnostika grafiky sady Visual StudioVisual Studio graphics diagnostics

Diagnostika grafiky sady Visual Studio je sada nástrojů pro zaznamenávání a analýzu problémů vykreslování a výkon v aplikacích rozhraní Direct3D.Visual Studio Graphics Diagnostics is a set of tools for recording and analyzing rendering and performance problems in Direct3D apps. Funkce diagnostiky grafiky můžete použít s aplikacemi, které běží místně v počítači Windows v emulátoru zařízení Windows nebo na vzdálený počítač nebo zařízení.Graphics Diagnostics features can be used with apps that are running locally on your Windows PC, in a Windows device emulator, or on a remote PC or device.

  • Vstup a výstup pro Vertex a Geometry Shader: jedna z nejžádanějších funkcí byla možnost zobrazit vstup a výstup vertex shader a shader geometrie a je nyní podporována v nástrojích.Input & Output for Vertex and Geometry shaders: The ability to view input and output of vertex shaders and geometry shaders has been one of the most requested features, and it is now supported in the tools. Jednoduše vyberte fázi sady Visual Studio nebo GS v okně fáze zřetězení spustit kontrola vstup a výstup v následující tabulce.Simply select the VS or GS stage in the Pipeline Stages view to start inspecting its input and output in the table below.

    Vstup/výstup pro shadery

  • Vyhledávání a filtrování v tabulce objektů: poskytuje rychlý a snadný způsob, jak najít prostředky hledáte.Search and filter in the object table: Provides a quick and easy way to find the resources you're looking for.

    Hledat

  • Historie prostředku: toto nové zobrazení poskytuje efektivní způsob, jak zobrazuje historii celý úpravy prostředku, jako jste použili při vykreslování zachyceného snímku.Resource History: This new view provides a streamlined way of seeing the entire modification history of a resource as it was used during the rendering of a captured frame. Abyste mohli vyvolat historie pro libovolné prostředky, stačí klikněte na ikonu hodin vedle libovolný prostředek hypertextový odkaz.To invoke the history for any resource, simply click the clock icon next to any resource hyperlink.

    Historie prostředku

    Zobrazí se nové rie prostředku oknem nástrojů, vyplní historii změn prostředku.This will display the new Resource History tool window, populated with the change history of the resource.

    Historie změn prostředků

    Všimněte si, že pokud byla zaznamenána rámce s úplnou volání zásobníku zachytávání povolené (sady Visual Studio > Nástroje > Možnosti pod diagnostiky grafiky), kontext každou událost změny může být rychle odvodit a kontrole v rámci projektu sady Visual Studio.Note that if your frame was captured with full call stack capturing enabled (Visual Studio > Tools > Options under Graphics Diagnostics), then the context of each change event can be quickly deduced and inspected within your Visual Studio project.

  • Statistika API: zobrazit podrobný souhrn využití rozhraní API v rámce.API Statistics: View a high-level summary of API usage in your frame. To může být užitečný v zjišťování volání že nemusí dobré si uvědomit, že provádíte vůbec nebo volání, které vytvoříte příliš mnoho.This can be handy in discovering calls you may not realize you’re making at all or calls you are making too much. Toto okno je k dispozici prostřednictvím zobrazení > Statistika API v analyzátoru grafiky sady Visual Studio.This window is available via View > API Statistics in Visual Studio Graphics Analyzer.

    Statistika API

  • Statistika paměti: zobrazit, kolik paměti je ovladač přidělování prostředků vytvoříte v rámci.Memory Statistics: View how much memory the driver is allocating for the resources you create in the frame. Toto okno je k dispozici prostřednictvím zobrazení > Statistika paměti v analyzátoru grafiky sady Visual Studio.This window is available via View > Memory Statistics in Visual Studio Graphics Analyzer. Data je možné zkopírovat do souboru CSV pro zobrazení v tabulce tak, že kliknete pravým tlačítkem a zvolíte Kopírovat vše.Data can be copied to a CSV file for viewing in a spreadsheet by right-clicking and choosing Copy All.

    Statistika paměti

  • Ověření snímku: nový seznam chyb a upozornění poskytuje snadný způsob, jak přejít seznamu událostí podle potenciálních problémů zjištěných vrstvu debug Direct3D.Frame Validation: The new errors and warnings list provides an easy way to navigate your event list based on potential issues detected by the Direct3D debug layer. Klikněte na tlačítko zobrazení > ověření snímku ve Visual Studio Graphics Analyzer otevření okna.Click View > Frame Validation in Visual Studio Graphics Analyzer to open the window. Pak klikněte na tlačítko spustit ověření spustit analýzu.Then click Run Validation to start the analysis. Může trvat několik minut v závislosti na složitosti rámce.It can take several minutes to complete, depending on the frame's complexity.

    Ověření snímku

  • Analýza snímků pro D3D12: analýzu snímků použít k analýze výkonu volání draw se přesměruje pokusy "co kdyby".Frame Analysis for D3D12: Use Frame Analysis to analyze draw call performance with directed "what-if" experiments. Přepněte na kartu analýza snímků a spuštění analýzy zobrazíte sestavu.Switch to the Frame Analysis tab and run analysis to view the report. Další informace, podívejte se GoingNative 25: Visual Studio analýza grafických snímků videa.For more details, watch the GoingNative 25: Visual Studio Graphics Frame Analysis video.

    Analýza snímků

  • Vylepšení využití GPU: otevřít trasování prostřednictvím využití GPU Visual Studio profiler GPU zobrazení nebo nástroji Windows Performance Analyzer (WPA) provést podrobnější analýzu.GPU Usage Improvements: Open traces taken via the Visual Studio GPU Usage profiler with either GPU View or the Windows Performance Analyzer (WPA) tool for more detailed analysis. Pokud máte není nainstalovaná sada Windows Performance Toolkit budou dva hypertextové odkazy, jeden pro WPA a druhou pro zobrazení GPU v pravém dolním rohu přehledu relace.If you have the Windows Performance Toolkit installed there will be two hyperlinks, one for WPA and other for GPU View, at the bottom right of the session overview.

    Využití GPU

    Otevřít v zobrazení GPU prostřednictvím tohoto odkazu podpory trasování synchronizované přibližování a posouvání na časové ose mezi VS a zobrazení GPU.Traces opened in GPU View via this link support synchronized zooming and panning in the timeline between VS and GPU View. Zaškrtávací políčko v sadě Visual Studio je slouží ke kontrole, jestli je povolená synchronizace, nebo ne.A checkbox in VS is used to control whether synchronization is enabled or not.

    Zobrazení GPU