Co nowego w języku C++ w programie Visual StudioWhat's new for C++ in Visual Studio

Program Visual Studio 2019 oferuje wiele aktualizacji i poprawek do środowiska Microsoft C++.Visual Studio 2019 brings many updates and fixes to the Microsoft C++ environment. Rozwiązano wiele usterek i problemów w kompilatorze i narzędziach.We've fixed many bugs and issues in the compiler and tools. Wiele z tych problemów zostało przesłanych przez klientów w wyniku zgłoszenia problemu i udostępnienia opcji sugestii w obszarze Wyślij opinię.Many of these issues were submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. Dziękujemy za zgłaszanie usterek!Thank you for reporting bugs! Aby uzyskać więcej informacji na temat nowości we wszystkich wersjach programu Visual Studio, zobacz co nowego w programie Visual studio 2019.For more information on what's new in all of Visual Studio, visit What's new in Visual Studio 2019. Aby uzyskać informacje na temat Nowości w języku C++ w programie Visual Studio 2017, zobacz co nowego w języku c++ w programie Visual studio 2017.For information on what's new for C++ in Visual Studio 2017, see What's new for C++ in Visual Studio 2017. Aby uzyskać informacje na temat Nowości w języku C++ w programie Visual Studio 2015 i jego wcześniejszych wersjach, zobacz Visual C++ co nowego 2003 do 2015.For information on what's new for C++ in Visual Studio 2015 and earlier versions, see Visual C++ What's New 2003 through 2015.

kompilator C++C++ compiler

  • Ulepszona obsługa funkcji i poprawek w języku C++ 17 oraz Eksperymentalna obsługa funkcji języka C++ 20, takich jak moduły i współprocedury.Enhanced support for C++17 features and correctness fixes, plus experimental support for C++20 features such as modules and coroutines. Aby uzyskać szczegółowe informacje, zobacz ulepszenia zgodności języka C++ w programie Visual Studio 2019.For detailed information, see C++ Conformance Improvements in Visual Studio 2019.

  • Ta /std:c++latest opcja zawiera teraz funkcje języka c++ 20, które nie są gotowe, w tym wstępną obsługę operatora c++ 20 <=> ("Spaceship") na potrzeby porównania trójwymiarowego.The /std:c++latest option now includes C++20 features that aren't necessarily complete, including initial support for the C++20 operator <=> ("spaceship") for three-way comparison.

  • Przełącznik kompilatora języka C++ /Gm jest obecnie przestarzały.The C++ compiler switch /Gm is now deprecated. Rozważ wyłączenie /Gm przełącznika w skryptach kompilacji, jeśli jest on jawnie zdefiniowany.Consider disabling the /Gm switch in your build scripts if it's explicitly defined. Można również bezpiecznie zignorować ostrzeżenia o zaniechaniu dla /Gm , ponieważ nie jest on traktowany jako błąd podczas używania "Traktuj ostrzeżenia jako błędy" ( /WX ).However, you can also safely ignore the deprecation warning for /Gm, because it's not treated as an error when using "Treat warnings as errors" (/WX).

  • Ponieważ MSVC rozpoczyna Implementowanie funkcji ze standardowego projektu C++ 20 w ramach /std:c++latest flagi, /std:c++latest jest teraz niezgodne z /clr (wszystkie wersje), /ZW i /Gm .As MSVC begins implementing features from the C++20 standard draft under the /std:c++latest flag, /std:c++latest is now incompatible with /clr (all flavors), /ZW, and /Gm. W programie Visual Studio 2019 Użyj /std:c++17 lub /std:c++14 trybów podczas kompilowania z /clr , /ZW lub /Gm (ale Zobacz poprzedni punktor).In Visual Studio 2019, use /std:c++17 or /std:c++14 modes when compiling with /clr, /ZW, or /Gm (but see previous bullet).

  • Prekompilowane nagłówki nie są już generowane domyślnie dla konsoli C++ i aplikacji klasycznych.Precompiled headers are no longer generated by default for C++ console and desktop apps.

Codegen, zabezpieczenia, Diagnostyka i przechowywanie wersjiCodegen, security, diagnostics, and versioning

Ulepszona analiza z programem /Qspectre w celu zapewnienia pomocy w zakresie ograniczenia dla Spectre wariantu 1 (CVE-2017-5753).Improved analysis with /Qspectre for providing mitigation assistance for Spectre Variant 1 (CVE-2017-5753). Aby uzyskać więcej informacji, zobacz Spectree ograniczenia w MSVC.For more information, see Spectre Mitigations in MSVC.

Ulepszenia standardowej biblioteki języka C++C++ standard library improvements

  • Implementacja dodatkowych funkcji i poprawek biblioteki C++ 17 i C++ 20.Implementation of additional C++17 and C++20 library features and correctness fixes. Aby uzyskać szczegółowe informacje, zobacz ulepszenia zgodności języka C++ w programie Visual Studio 2019.For detailed information, see C++ Conformance Improvements in Visual Studio 2019.

  • Clang-format został zastosowany do nagłówków standardowej biblioteki C++ w celu zwiększenia czytelności.Clang-Format has been applied to the C++ standard library headers for improved readability.

  • Ponieważ program Visual Studio obsługuje teraz Tylko mój kod dla języka C++, standardowa biblioteka nie musi już zapewniać niestandardowych maszyn std::function i std::visit Aby osiągnąć ten sam efekt.Because Visual Studio now supports Just My Code for C++, the standard library no longer needs to provide custom machinery for std::function and std::visit to achieve the same effect. Usuwanie maszyn w dużej mierze nie ma żadnych efektów widocznych dla użytkownika.Removing that machinery largely has no user-visible effects. Jedynym wyjątkiem jest to, że kompilator nie będzie już generować diagnostyki wskazującej problemy w wierszu 15732480 lub 16707566 <type_traits> lub <variant> .One exception is that the compiler will no longer produce diagnostics that indicate issues on line 15732480 or 16707566 of <type_traits> or <variant>.

Ulepszenia wydajności/przepływności w bibliotece kompilator i StandardowaPerformance/throughput improvements in the compiler and standard library

  • Ulepszenia przepływności kompilacji, w tym sposób, w jaki konsolidator obsługuje operacje we/wy na plikach, oraz czas połączenia w przypadku scalania i tworzenia typu PDB.Build throughput improvements, including the way the linker handles File I/O, and link time in PDB type merging and creation.

  • Dodano obsługę podstawową dla systemu OpenMP SIMD wektoryzacji.Added basic support for OpenMP SIMD vectorization. Można ją włączyć przy użyciu nowego przełącznika kompilatora /openmp:experimental .You can enable it using the new compiler switch /openmp:experimental. Ta opcja zezwala na używanie pętli #pragma omp simd do potencjalnie wektora.This option allows loops annotated with #pragma omp simd to potentially be vectorized. Wektoryzacji nie jest gwarantowany, natomiast pętle, które nie są wektorowe, zostaną wyświetlone ostrzeżenie.The vectorization isn't guaranteed, and loops annotated but not vectorized will get a warning reported. Nie są obsługiwane żadne klauzule SIMD; są one ignorowane i raportowane jest ostrzeżenie.No SIMD clauses are supported; they're ignored, and a warning is reported.

  • Dodano nowy, wbudowany przełącznik wiersza polecenia /Ob3 , który jest bardziej agresywną wersją programu /Ob2 .Added a new inlining command-line switch /Ob3, which is a more aggressive version of /Ob2. /O2 (Optymalizacja plików binarnych dla szybkości) nadal jest /Ob2 Domyślnie implikowana./O2 (optimize the binary for speed) still implies /Ob2 by default. Jeśli okaże się, że kompilator nie działa w sposób agresywny, rozważ przekazanie /O2 -Ob3 .If you find that the compiler doesn't inline aggressively enough, consider passing /O2 -Ob3.

  • Dodaliśmy obsługę funkcji wewnętrznych SVML (Short Vector Math Library).We've added support for Short Vector Math Library (SVML) intrinsic functions. Te funkcje obliczają odpowiedniki wektorów 128-bitowe, 256-bitowe lub 512-bitowego.These functions compute the 128-bit, 256-bit, or 512-bit vector equivalents. Dodaliśmy je do obsługi wektoryzacji pętli z wywołaniami funkcji biblioteki matematycznej i niektórych innych operacji, takich jak dzielenie liczby całkowitej.We added them to support hand vectorization of loops with calls to math library functions, and certain other operations like integer division. Aby uzyskać definicje obsługiwanych funkcji, zobacz Intel Intrinsic Guide (Przewodnik wewnętrzny firmy Intel).See the Intel Intrinsic Guide for definitions of the supported functions.

  • Nowe i ulepszone optymalizacje:New and improved optimizations:

    • Uproszczone i arytmetyczne uproszczenia dla wyrażeń wykorzystujących wewnętrzne SIMD wektorowe, zarówno dla formularzy zmiennoprzecinkowych, jak i liczb całkowitych.Constant-folding and arithmetic simplifications for expressions using SIMD vector intrinsics, for both float and integer forms.

    • Bardziej wydajna analiza dla wyodrębniania informacji z przepływu sterowania (instrukcji if/else/Switch) w celu usunięcia gałęzi zawsze sprawdzanych pod kątem wartości true lub false.A more powerful analysis for extracting information from control flow (if/else/switch statements) to remove branches always proven to be true or false.

    • Ulepszono funkcji memset odwrócenia, aby użyć instrukcji SSE2 Vector.Improved memset unrolling to use SSE2 vector instructions.

    • Ulepszone usuwanie bezużytecznych kopii struktury/klas, szczególnie w przypadku programów C++, które są przekazywane przez wartość.Improved removal of useless struct/class copies, especially for C++ programs that pass by value.

    • Ulepszona Optymalizacja kodu przy użyciu memmove , takich jak std::copy lub std::vector i std::string konstrukcja.Improved optimization of code using memmove, such as std::copy or std::vector and std::string construction.

  • Zoptymalizowano fizyczny projekt biblioteki standardowej, aby uniknąć niebezpośredniego kompilowania części biblioteki standardowej.Optimized the standard library physical design to avoid compiling parts of the standard library not directly included. Ta zmiana spowoduje skrócenie czasu kompilacji pustego pliku, który zawiera tylko <vector> połowę.This change cut the build time of an empty file that includes only <vector> in half. W związku z tym może być konieczne dodanie #include dyrektyw dla nagłówków, które wcześniej zostały uwzględnione.As a consequence, you may need to add #include directives for headers that were previously indirectly included. Na przykład kod, który używa std::out_of_range może teraz być dodany #include <stdexcept> .For example, code that uses std::out_of_range may now need to add #include <stdexcept>. Kod, który używa operatora wstawiania strumienia, może teraz być dodany #include <ostream> .Code that uses a stream insertion operator may now need to add #include <ostream>. Korzyść polega na tym, że tylko jednostki tłumaczenia faktycznie używające <stdexcept> lub <ostream> komponentów zwracają koszt przepływności w celu ich skompilowania.The benefit is that only translation units actually using <stdexcept> or <ostream> components pay the throughput cost to compile them.

  • if constexpr został zastosowany w większej liczbie miejsc w standardowej bibliotece w celu zwiększenia przepływności i zmniejszenia rozmiaru kodu w operacjach kopiowania w permutacjach, takich jak odwracanie i obracanie, oraz w bibliotece algorytmów równoległych.if constexpr was applied in more places in the standard library for improved throughput and reduced code size in copy operations, in permutations like reverse and rotate, and in the parallel algorithms library.

  • Standardowa biblioteka jest teraz używana wewnętrznie if constexpr w celu skrócenia czasów kompilowania, nawet w trybie c++ 14.The standard library now internally uses if constexpr to reduce compile times, even in C++14 mode.

  • Wykrywanie dynamicznego łączenia środowiska uruchomieniowego dla biblioteki algorytmów równoległych nie używa już całej strony do przechowywania tablicy wskaźników funkcji.The runtime dynamic linking detection for the parallel algorithms library no longer uses an entire page to store the function pointer array. Oznaczenie tej pamięci jako tylko do odczytu nie jest już ważne ze względów bezpieczeństwa.Marking this memory read-only was considered no longer relevant for security purposes.

  • std::threadKonstruktor nie czeka już na uruchomienie wątku i nie wstawia już tak wielu warstw wywołań funkcji między podstawową biblioteką C a podanym _beginthreadex możliwym do wywołania obiektem.std::thread's constructor no longer waits for the thread to start, and no longer inserts so many layers of function calls between the underlying C library _beginthreadex and the supplied callable object. Poprzednio std::thread umieścić sześć funkcji między _beginthreadex i podanym możliwym do nadania obiektowi.Previously std::thread put six functions between _beginthreadex and the supplied callable object. Ta liczba została zredukowana do trzech, z których tylko trzy std::invoke .This number has been reduced to only three, two of which are just std::invoke. Ta zmiana powoduje również rozwiązanie usterki powodującej zaciemnienie czasu, w której std::thread Konstruktor przestanie odpowiadać, jeśli zegar systemowy został zmieniony w chwili, gdy jest std::thread tworzony.This change also resolves an obscure timing bug, where a std::thread constructor would stop responding if the system clock changed at the exact moment the std::thread was being created.

  • Naprawiono regresję wydajności std::hash wprowadzoną podczas wdrażania std::hash<std::filesystem::path> .Fixed a performance regression in std::hash that we introduced when implementing std::hash<std::filesystem::path>.

  • Biblioteka standardowa używa teraz destruktorów zamiast bloków catch w kilku miejscach, aby osiągnąć poprawność.The standard library now uses destructors instead of catch blocks in several places to achieve correctness. Ta zmiana skutkuje lepszym interakcją debugera: wyjątki zgłaszane przez bibliotekę standardową w lokalizacjach, których dotyczy ta operacja, są teraz wyświetlane jako zgłoszone przez ich pierwotną witrynę throw, a nie z naszych ponownych alertów.This change results in better debugger interaction: Exceptions you throw through the standard library in the affected locations now show up as being thrown from their original throw site, rather than our rethrow. Nie wszystkie bloki catch biblioteki standardowej zostały wyeliminowane.Not all standard library catch blocks were eliminated. Oczekujemy, że liczba bloków catch zostanie zmniejszona w nowszych wersjach MSVC.We expect the number of catch blocks to be reduced in later releases of MSVC.

  • Nieoptymalny codegen w wyniku std::bitset warunkowego zgłaszania wewnątrz funkcji noexcept został ustalony przez Rozstrzelenie ścieżki, która zostanie wyrzucana.Suboptimal codegen in std::bitset caused by a conditional throw inside a noexcept function was fixed by factoring out the throwing path.

  • Z std::list i std::unordered_* rodziną są używane Iteratory niebędące debugowaniem wewnętrznie w większej liczbie miejsc.The std::list and std::unordered_* family use non-debugging iterators internally in more places.

  • Kilka std::list elementów członkowskich zostało zmienionych w celu ponownego użycia węzłów listy, tam gdzie jest to możliwe, a nie cofnięcia przydziału i ponownego przydzielenia.Several std::list members were changed to reuse list nodes where possible rather than deallocating and reallocating them. Na przykład w przypadku, gdy list<int> ma już rozmiar 3, wywołanie w celu zastąpi element assign(4, 1729) liczby całkowite w pierwszych trzech węzłach listy i przydzieli jeden nowy węzeł listy z wartością 1729.For example, given a list<int> that already has a size of 3, a call to assign(4, 1729) now overwrites the ints in the first three list nodes, and allocates one new list node with the value 1729.

  • Wszystkie wywołania biblioteki standardowej erase(begin(), end()) zostały zmienione na clear() .All standard library calls to erase(begin(), end()) were changed to clear().

  • std::vector teraz inicjuje i wymazuje elementy bardziej wydajnie w niektórych przypadkach.std::vector now initializes and erases elements more efficiently in certain cases.

  • Udoskonalenia w std::variant celu zwiększenia przyjaznego Optymalizatora, co prowadzi do lepszego wygenerowanego kodu.Improvements to std::variant to make it more optimizer-friendly, resulting in better generated code. Tworzenie kodu w kodzie jest teraz znacznie lepszym rozwiązaniem std::visit .Code inlining is now much better with std::visit.

Środowisko IDE języka C++C++ IDE

Obsługa Live Share C++Live Share C++ support

Live Share teraz obsługuje C++, dzięki czemu deweloperzy mogą korzystać z programu Visual Studio lub Visual Studio Code do współpracy w czasie rzeczywistym.Live Share now supports C++, allowing developers using Visual Studio or Visual Studio Code to collaborate in real time. Aby uzyskać więcej informacji, zobacz temat ogłaszanie Live Share w języku C++: udostępnianie i współpraca w czasie rzeczywistymFor more information, see Announcing Live Share for C++: Real-Time Sharing and Collaboration

Rozszerzenia intellicode dla języka C++IntelliCode for C++

Visual Studio 2019 w wersji 16.1Visual Studio 2019 version 16.1

Rozszerzenia intellicode używa własnego rozbudowanego szkolenia i kontekstu kodu, aby określić, najprawdopodobniej z nich korzystasz w górnej części listy uzupełniania.IntelliCode uses its own extensive training and your code context to put what you're most likely to use at the top of your completion list. Często może wyeliminować konieczność przewijania w dół listy.It can often eliminate the need to scroll down through the list. W przypadku języka C++ rozszerzenia intellicode oferuje największą pomoc w przypadku korzystania z popularnych bibliotek, takich jak standardowa biblioteka.For C++, IntelliCode offers the most help when using popular libraries such as the standard library. Rozszerzenia intellicode jest opcjonalnym rozszerzeniem dostępnym jako składnik obciążenia w instalatorze.IntelliCode is an optional extension available as a workload component in the installer. Aby uzyskać więcej informacji, zobacz temat sugestie uzupełniania kodu z asystą w języku AI zostały przekazane do języka C++ za pośrednictwem rozszerzenia intellicode.For more information, see AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode.

IntelliSense szablonuTemplate IntelliSense

Pasek szablonu korzysta teraz z interfejsu użytkownika okna wglądu , a nie okna modalnego, obsługuje zagnieżdżone szablony i wstępnie wypełnia wszystkie argumenty domyślne w oknie wgląd.The Template Bar now uses the Peek Window UI rather than a modal window, supports nested templates, and pre-populates any default arguments into the Peek Window. Aby uzyskać więcej informacji, zobacz artykuł ulepszenia funkcji IntelliSense dla programu Visual Studio 2019 (wersja zapoznawcza 2).For more information, see Template IntelliSense Improvements for Visual Studio 2019 Preview 2. Ostatnio używana lista rozwijana na pasku szablonu pozwala szybko przełączać się między poprzednimi zestawami przykładowych argumentów.A Most Recently Used dropdown in the Template Bar enables you to quickly switch between previous sets of sample arguments.

Nowe środowisko okna uruchamianiaNew Start window experience

Podczas uruchamiania środowiska IDE pojawia się nowe okno uruchamiania.When launching the IDE, a new Start window appears. Dostępne są opcje otwierania ostatnich projektów, klonowania kodu z kontroli źródła, otwierania kodu lokalnego jako rozwiązania lub folderu lub tworzenia nowego projektu.It has options to open recent projects, clone code from source control, open local code as a solution or a folder, or create a new project. Okno dialogowe Nowy projekt zostało również przedzielone na wyszukanie, a następnie przeprowadzono filtrowanie.The New Project dialog has also been overhauled into a search-first, filterable experience.

Nowe nazwy dla niektórych szablonów projektuNew names for some project templates

Zmodyfikowano kilka nazw i opisów szablonu projektu, aby dopasować je do zaktualizowanego okna dialogowego nowego projektu.We've modified several project template names and descriptions to fit with the updated New Project dialog.

Różne ulepszenia produktywnościVarious productivity improvements

Program Visual Studio 2019 zawiera następujące funkcje, które ułatwiają tworzenie i bardziej intuicyjne kodowanie:Visual Studio 2019 includes the following features that will help make coding easier and more intuitive:

  • Szybkie poprawki dla:Quick fixes for:
    • Dodaj brakujące #includeAdd missing #include
    • Wartość zerowa do nullptrNULL to nullptr
    • Dodaj brakujący średnikAdd missing semicolon
    • Rozwiązywanie brakującej przestrzeni nazw lub zakresuResolve missing namespace or scope
    • Zastąp złe operandy pośrednie ( * do & i & do * )Replace bad indirection operands (* to & and & to *)
  • Szybkie informacje dla bloku przez umieszczenie kursora w zamykającym nawiasie klamrowymQuick Info for a block by hovering on closing brace
  • Wgląd w plik nagłówka/koduPeek Header / Code File
  • Przejdź do definicji na #include otwiera plikGo to Definition on #include opens the file

Aby uzyskać więcej informacji, zobacz ulepszenia produktywności w języku C++ w programie Visual Studio 2019 Preview 2.For more information, see C++ Productivity Improvements in Visual Studio 2019 Preview 2.

Udoskonalenia sekcji szybkich informacjiQuickInfo improvements

Visual Studio 2019 w wersji 16.1Visual Studio 2019 version 16.1

Etykietka Szybka podpowiedź teraz uwzględnia kolorowanie semantyczne edytora.The Quick Info tooltip now respects the semantic colorization of your editor. Dostępne jest również nowe łącze wyszukiwania online , które umożliwia wyszukanie dokumentacji online w celu uzyskania dodatkowych informacji na temat aktywowanej konstrukcji kodu.It also has a new Search Online link that will search for online docs to learn more about the hovered code construct. Link dostarczony przez szybkie informacje dla kodu w kolorze czerwonym będzie szukać błędu w trybie online.The link provided by Quick Info for red-squiggled code will search for the error online. Dzięki temu nie trzeba ponownie wpisywać komunikatu do przeglądarki.That way you don't need to retype the message into your browser. Aby uzyskać więcej informacji, zobacz ulepszenia szybkiej informacji w programie Visual Studio 2019: kolorowanie i przeszukiwanie w trybie online.For more information, see Quick Info Improvements in Visual Studio 2019: Colorization and Search Online.

Rozszerzenia intellicode dostępne w obciążeniu C++IntelliCode available in C++ workload

Visual Studio 2019 w wersji 16.1Visual Studio 2019 version 16.1

Rozszerzenia intellicode teraz dostarcza jako składnik opcjonalny do tworzenia aplikacji klasycznych przy użyciu obciążenia C++ .IntelliCode now ships as an optional component in the Desktop Development with C++ workload. Aby uzyskać więcej informacji, zobacz udoskonalony język C++ rozszerzenia intellicode teraz dostarczany z programem Visual Studio 2019.For more information, see Improved C++ IntelliCode now Ships with Visual Studio 2019.

Obsługa CMakeCMake support

  • Obsługa CMake 3,14Support for CMake 3.14

  • Program Visual Studio może teraz otwierać istniejące pamięci podręczne CMake wygenerowane przez narzędzia zewnętrzne, takie jak CMakeGUI, dostosowane systemy meta-Build lub skrypty kompilacji, które wywołują cmake.exe.Visual Studio can now open existing CMake caches generated by external tools, such as CMakeGUI, customized meta-build systems or build scripts that invoke cmake.exe themselves.

  • Ulepszona wydajność funkcji IntelliSense.Improved IntelliSense performance.

  • Nowy edytor ustawień oferuje alternatywę do ręcznego edytowania CMakeSettings.jsw pliku i zapewnia pewną zgodność z CMakeGUI.A new settings editor provides an alternative to manually editing the CMakeSettings.json file, and provides some parity with CMakeGUI.

  • Program Visual Studio ułatwia rozpoczęcie programowania w języku C++ za pomocą narzędzia CMake w systemie Linux, wykrywając, czy na komputerze z systemem Linux znajduje się zgodna wersja narzędzia CMake.Visual Studio helps bootstrap your C++ development with CMake on Linux by detecting if you have a compatible version of CMake on your Linux machine. W przeciwnym razie umożliwia jej zainstalowanie dla Ciebie.If not, it offers to install it for you.

  • Niezgodne ustawienia w pliku cmakesettings, takie jak niezgodne architektury lub niezgodne ustawienia generatora CMake, pokazują zygzaki w edytorze JSON i błędy na liście błędów.Incompatible settings in CMakeSettings, such as mismatched architectures or incompatible CMake generator settings, show squiggles in the JSON editor and errors in the error list.

  • W projektach CMake otwieranych w środowisku IDE po uruchomieniu polecenia vcpkg integrate install automatycznie jest wykrywany i włączany łańcuch narzędzi vcpkg.The vcpkg toolchain is automatically detected and enabled for CMake projects that are opened in the IDE once vcpkg integrate install has been run. To zachowanie można wyłączyć, określając pusty plik łańcucha narzędzi w pliku CMakeSettings.This behavior can be turned off by specifying an empty toolchain file in CMakeSettings.

  • W projektach CMake domyślnie jest teraz włączane debugowanie Tylko mój kod.CMake projects now enable Just My Code debugging by default.

  • Ostrzeżenia analizy statycznej są teraz przetwarzane w tle i wyświetlane w edytorze dla projektów CMake.Static analysis warnings are now processed in the background and displayed in the editor for CMake projects.

  • Wyraźniejsze Kompilowanie i Konfigurowanie komunikatów "BEGIN" i "End" dla projektów CMake i obsługi interfejsu użytkownika postępu kompilacji programu Visual Studio.Clearer build and configure 'begin' and 'end' messages for CMake projects and support for Visual Studio's build progress UI. Ponadto istnieje teraz ustawienie szczegółowości CMake w obszarze narzędzia > opcje umożliwiające dostosowanie poziomu szczegółowości komunikatów kompilacji CMAKE i konfiguracji w okno dane wyjściowe.Additionally, there's now a CMake verbosity setting in Tools > Options to customize the detail level of CMake build and configuration messages in the Output Window.

  • To cmakeToolchain ustawienie jest teraz obsługiwane w CMakeSettings.jsna, aby określić łańcuchy narzędzi bez ręcznej modyfikacji wiersza polecenia CMAKE.The cmakeToolchain setting is now supported in CMakeSettings.json to specify toolchains without manually modifying the CMake command line.

  • Nowe menu Kompiluj wszystkie skróty Ctrl + Shift + B.A new Build All menu shortcut Ctrl+Shift+B.

Visual Studio 2019 w wersji 16.1Visual Studio 2019 version 16.1

Linux i podsystem Windows dla systemu LinuxLinux and the Windows Subsystem for Linux

Visual Studio 2019 w wersji 16.1Visual Studio 2019 version 16.1

Integracja IncrediBuildIncrediBuild integration

IncrediBuild jest dołączany jako składnik opcjonalny do tworzenia aplikacji klasycznych przy użyciu obciążenia C++ .IncrediBuild is included as an optional component in the Desktop development with C++ workload. Monitor kompilacji IncrediBuild jest w pełni zintegrowany w środowisku IDE programu Visual Studio.The IncrediBuild Build Monitor is fully integrated in the Visual Studio IDE. Aby uzyskać więcej informacji, zobacz Wizualizacja kompilacji za pomocą monitora kompilacji IncrediBuild i programu Visual Studio 2019.For more information, see Visualize your build with IncrediBuild's Build Monitor and Visual Studio 2019.

DebugowanieDebugging

  • W przypadku aplikacji C++ działających w systemie Windows pliki PDB są teraz ładowane w osobnym procesie 64-bitowym.For C++ applications running on Windows, PDB files now load in a separate 64-bit process. Ta zmiana dotyczy zakresu awarii spowodowanych brakiem pamięci przez debuger.This change addresses a range of crashes caused by the debugger running out of memory. Na przykład podczas debugowania aplikacji zawierających dużą liczbę modułów i plików PDB.For example, when debugging applications that contain a large number of modules and PDB files.

  • Wyszukiwanie jest włączone w oknach czujka, autostartyi lokalne .Search is enabled in the Watch, Autos, and Locals windows.

Programowanie aplikacji klasycznych systemu Windows przy użyciu języka C++Windows desktop development with C++

  • Te kreatory C++ ATL/MFC nie są już dostępne:These C++ ATL/MFC wizards are no longer available:

    • Kreator składników ATL COM+ 1.0ATL COM+ 1.0 Component Wizard
    • Kreator składnika stron Active Server ATLATL Active Server Pages Component Wizard
    • Kreator dostawcy interfejsu OLE DB ATLATL OLE DB Provider Wizard
    • Kreator strony właściwości ATLATL Property Page Wizard
    • Kreator konsumenta OLE DB ATLATL OLE DB Consumer Wizard
    • Odbiorca MFC ODBCMFC ODBC Consumer
    • Klasa MFC z kontrolki ActiveXMFC class from ActiveX control
    • Klasa MFC z typu lib.MFC class from Type Lib.

    Przykładowy kod dla tych technologii został zarchiwizowany w witrynie Microsoft Docs i w repozytorium GitHub VCSamples.Sample code for these technologies is archived at Microsoft Docs and the VCSamples GitHub repository.

  • Zestaw Windows 8.1 Software Development Kit (SDK) nie jest już dostępny w Instalatorze programu Visual Studio.The Windows 8.1 Software Development Kit (SDK) is no longer available in the Visual Studio installer. Zalecamy uaktualnienie projektów C++ do najnowszej wersji Windows 10 SDK.We recommend you upgrade your C++ projects to the latest Windows 10 SDK. Jeśli masz stałą zależność od systemu w wersji 8.1, możesz pobrać go z archiwum zestawu Windows SDK.If you have a hard dependency on 8.1, you can download it from the Windows SDK archive.

  • Obsługa systemu Windows XP nie będzie już dostępna w najnowszym zestawie narzędzi języka C++.Windows XP targeting will no longer be available for the latest C++ toolset. Program XP obsługujący biblioteki MSVC & kompilatora programu VS 2017 na poziomie jest nadal obsługiwany i można go zainstalować za pomocą "poszczególnych składników".XP targeting with VS 2017-level MSVC compiler & libraries is still supported and can be installed via "Individual components."

  • Nasza dokumentacja aktywnie zniechęca do użycia modułów scalania w przypadku wdrożenia środowiska uruchomieniowego Visual C++.Our documentation actively discourages usage of Merge Modules for Visual C++ Runtime deployment. Zajmiemy się dodatkowymi krokami w tej wersji o oznaczaniu naszych MSMs jako przestarzałych.We're taking the extra step this release of marking our MSMs as deprecated. Rozważ migrację wdrożenia centralnego VCRuntime z plików MSM do pakietu redystrybucyjnego.Consider migrating your VCRuntime central deployment from MSMs to the redistributable package.

Programowanie aplikacji mobilnych za pomocą języka C++ (Android i iOS)Mobile development with C++ (Android and iOS)

Środowiskiem systemu Android dla języka C++ jest teraz domyślnie zestaw SDK 25 dla systemu Android i zestaw NDK 16b dla systemu Android.The C++ Android experience now defaults to Android SDK 25 and Android NDK 16b.

Zestaw narzędzi platformy Clang/C2Clang/C2 platform toolset

Składnik eksperymentalny Clang/C2 został usunięty.The Clang/C2 experimental component has been removed. Użyj zestawu narzędzi MSVC, aby uzyskać pełną zgodność ze standardami języka C++ z /permissive- /std:c++17 systemami i lub CLANG/LLVM łańcucha narzędzi dla systemu Windows.Use the MSVC toolset for full C++ standards conformance with /permissive- and /std:c++17, or the Clang/LLVM toolchain for Windows.

Analiza koduCode analysis

Visual Studio 2019 w wersji 16.1Visual Studio 2019 version 16.1

Testowanie jednostekUnit testing

Szablon zarządzanego projektu testowego w języku C++ nie jest już dostępny.The Managed C++ Test Project template is no longer available. Można nadal używać zarządzanej platformy testów C++ w istniejących projektach.You can continue using the Managed C++ Test framework in your existing projects. W przypadku nowych testów jednostkowych należy rozważyć użycie jednego z natywnych platform testowych, dla których program Visual Studio udostępnia szablony (MSTest, Google Test) lub szablon projektu testu zarządzanego w języku C#.For new unit tests, consider using one of the native test frameworks for which Visual Studio provides templates (MSTest, Google Test), or the Managed C# Test Project template.

Program Visual Studio 2017 udostępnia wiele aktualizacji i poprawek do środowiska języka C++.Visual Studio 2017 brings many updates and fixes to the C++ environment. Naprawiono ponad 250 usterek i zgłoszono problemy w kompilatorze i narzędziach.We've fixed over 250 bugs and reported issues in the compiler and tools. Wiele przesłanych przez klientów w wyniku zgłoszenia problemu i udostępnienia opcji sugestii w obszarze Wyślij opinię.Many were submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. Dziękujemy za zgłaszanie usterek!Thank you for reporting bugs! Aby uzyskać więcej informacji na temat nowości we wszystkich wersjach programu Visual Studio, zobacz co nowego w programie Visual studio 2017.For more information on what's new in all of Visual Studio, see What's new in Visual Studio 2017. Aby uzyskać informacje na temat Nowości w języku C++ w programie Visual Studio 2019, zobacz co nowego w języku c++ w programie Visual Studio.For information on what's new for C++ in Visual Studio 2019, see What's new for C++ in Visual Studio. Aby uzyskać informacje na temat Nowości w języku C++ w programie Visual Studio 2015 i jego wcześniejszych wersjach, zobacz Visual C++ co nowego 2003 do 2015.For information on what's new for C++ in Visual Studio 2015 and earlier versions, see Visual C++ What's New 2003 through 2015.

Kompilator języka Visual Studio 2017 C++Visual Studio 2017 C++ compiler

Ulepszenia zgodności języka C++C++ conformance improvements

Zaktualizowaliśmy kompilator i standardową bibliotekę języka C++ w tej wersji z ulepszoną obsługą funkcji języka C++ 11 i C++ 14.We've updated the C++ compiler and standard library in this release with enhanced support for C++11 and C++14 features. Obejmuje to również wstępną obsługę pewnych funkcji, które powinny być w standardzie C++ 17.It also includes preliminary support for certain features expected to be in the C++17 standard. Aby uzyskać szczegółowe informacje, zobacz ulepszenia zgodności języka C++ w programie Visual Studio 2017.For detailed information, see C++ Conformance Improvements in Visual Studio 2017.

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

Kompilator obsługuje około 75% funkcji, które są nowością w języku C++ 17, w tym powiązania strukturalne, constexpr wyrażenia lambda, if constexpr zmienne wbudowane, zapełnianie wyrażeń i Dodawanie noexcept do systemu typu.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. Te funkcje są dostępne w ramach /std:c++17 opcji.These features are available under the /std:c++17 option. Aby uzyskać więcej informacji, zobacz ulepszenia zgodności języka C++ w programie Visual Studio 2017For more information, see C++ Conformance Improvements in Visual Studio 2017

Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7

Zestaw narzędzi kompilatora MSVC w programie Visual Studio w wersji 15,7 jest teraz zgodny ze standardem C++.The MSVC compiler toolset in Visual Studio version 15.7 now conforms with the C++ Standard. Aby uzyskać więcej informacji, zobacz temat ogłaszanie: MSVC jest zgodny ze standardem c++ i zgodnym z językiem Microsoft c++.For more information, see Announcing: MSVC Conforms to the C++ Standard and Microsoft C++ Language Conformance.

Visual Studio 2017 w wersji 15,8Visual Studio 2017 version 15.8

/experimental:preprocessorPrzełącznik kompilatora włącza nowy eksperymentalny preprocesor MSVC, który będzie ostatecznie zgodny ze wszystkimi odpowiednimi standardami C i C++.The /experimental:preprocessor compiler switch enables the new experimental MSVC preprocessor that will eventually conform to all applicable C and C++ standards. Aby uzyskać więcej informacji, zobacz temat MSVC New preprocesora Overview.For more information, see MSVC new preprocessor overview.

Nowe opcje kompilatoraNew compiler options

  • /permissive-: Włącz wszystkie ścisłe normy zgodne z opcjami kompilatora i Wyłącz większość rozszerzeń kompilatora specyficznych dla firmy Microsoft ( __declspec(dllimport) na przykład)./permissive-: Enable all strict standards conformance compiler options and disable most Microsoft-specific compiler extensions (but not __declspec(dllimport), for example). Ta opcja jest domyślnie włączona w programie Visual Studio 2017 w wersji 15,5.This option is on by default in Visual Studio 2017 version 15.5. /permissive- Tryb zgodności obejmuje obsługę dwuetapowego wyszukiwania nazw.The /permissive- conformance mode includes support for two-phase name lookup. Aby uzyskać więcej informacji, zobacz ulepszenia zgodności języka C++ w programie Visual Studio.For more information, see C++ Conformance Improvements in Visual Studio.

  • /diagnostics: Umożliwia wyświetlanie błędu diagnostyki lub lokalizacji ostrzegawczej na trzy różne sposoby: tylko numer wiersza, numer wiersza i kolumny, numer wiersza i kolumnę, z karetką pod nieprawidłowym wierszem kodu./diagnostics: Enables display of the diagnostic error or warning location three different ways: just the line number, the line number and column, or the line number and column, with a caret under the offending line of code.

  • /debug:fastlink: Włącz do 30% szybszych przyrostowych czasów linków (vs. Visual Studio 2015), nie kopiując wszystkich informacji debugowania do pliku 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. Zamiast tego plik PDB wskazuje informacje o debugowaniu dla plików obiektu i biblioteki użytych do utworzenia pliku wykonywalnego.The PDB file instead points to the debug information for the object and library files used to create the executable. Zobacz szybszy cykl kompilacji c++ w programie vs "15" /Debug:fastlink i zalecenia dotyczące przyspieszenia kompilacji C++ w programie Visual Studio.See Faster C++ build cycle in VS "15" with /Debug:fastlink and Recommendations to speed C++ builds in Visual Studio.

  • Program Visual Studio 2017 umożliwia korzystanie /sdl z programu z usługą /await .Visual Studio 2017 allows using /sdl with /await. Usunięto /RTC ograniczenie przy użyciu procedur wspólnych.We removed the /RTC limitation with Coroutines.

Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • /std:c++14 i /std:c++latest : te opcje kompilatora umożliwiają wybór określonych wersji języka programowania ISO C++ w projekcie./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. Większość nowych funkcji w wersji Standard jest chronionych przez /std:c++latest opcję.Most of the new draft standard features are guarded by the /std:c++latest option.

  • /std:c++17 Włącza zestaw funkcji języka C++ 17 wdrożonych przez kompilator./std:c++17 enables the set of C++17 features implemented by the compiler. Ta opcja powoduje wyłączenie obsługi biblioteki kompilatora i standardowej dla funkcji po C++ 17: te, które są zmieniane lub nowe w nowszych wersjach roboczej wersji roboczej, oraz aktualizacje usterek w standardzie C++.This option disables compiler and standard library support for features after C++17: ones that are changed or new in later versions of the Working Draft, and defect updates of the C++ Standard. Aby włączyć te funkcje, użyj programu /std:c++latest .To enable those features, use /std:c++latest.

Codegen, zabezpieczenia, Diagnostyka i przechowywanie wersjiCodegen, security, diagnostics, and versioning

W tej wersji wprowadzono kilka ulepszeń optymalizacji, generowania kodu, przechowywania wersji zestawu narzędzi i diagnostyki.This release brings several improvements in optimization, code generation, toolset versioning, and diagnostics. Do istotnych ulepszeń należą:Some notable improvements include:

  • Ulepszone generowanie kodu pętli: obsługa automatycznej wektoryzacji dzielenia stałych liczb całkowitych, lepsza identyfikacja wzorców funkcji memset.Improved code generation of loops: Support for automatic vectorization of division of constant integers, better identification of memset patterns.
  • Ulepszone zabezpieczenia kodu: Ulepszona emisja diagnostyki kompilatora przepełnienia buforu i /guard:cf teraz chroni instrukcje Switch, które generują tabele skoku.Improved code security: Improved emission of buffer overrun compiler diagnostics, and /guard:cf now guards switch statements that generate jump tables.
  • Przechowywanie wersji: wartość wbudowanego makra preprocesora monotonicznie jest teraz aktualizowana ** _ _ ** w każdej aktualizacji zestawu narzędzi Visual C++.Versioning: The value of the built-in preprocessor macro _MSC_VER is now being monotonically updated at every Visual C++ toolset update. Aby uzyskać więcej informacji, zobacz Visual C++ wersja kompilatora.For more information, see Visual C++ Compiler Version.
  • Nowy układ zestawu narzędzi: kompilator i powiązane narzędzia do kompilacji mają nową lokalizację i strukturę katalogów na komputerze deweloperskim.New toolset layout: The compiler and related build tools have a new location and directory structure on your development machine. Nowy układ umożliwia instalacje równoległe wielu wersji kompilatora.The new layout enables side-by-side installations of multiple versions of the compiler. Aby uzyskać więcej informacji, zobacz układ narzędzi kompilatora w programie Visual Studio 2017.For more information, see Compiler Tools Layout in Visual Studio 2017.
  • Ulepszona diagnostyka: w oknie danych wyjściowych jest teraz wyświetlana kolumna, w której występuje błąd.Improved diagnostics: The output window now shows the column where an error occurs. Aby uzyskać więcej informacji, zobacz ulepszenia diagnostyki kompilatora języka C++ w programie vs "15" (wersja zapoznawcza 5).For more information, see C++ compiler diagnostics improvements in VS "15" Preview 5.
  • W przypadku korzystania ze współprocedur, wartość eksperymentalne słowo kluczowe (dostępne w ramach /await opcji) zostało usunięte.When using coroutines, the experimental keyword yield (available under the /await option) has been removed. Kod powinien zostać zaktualizowany do użycia co_yield zamiast tego.Your code should be updated to use co_yield instead. Aby uzyskać więcej informacji, zobacz yield słowo kluczowe, aby przejść do co_yield programu vs 2017.For more information, see yield keyword to become co_yield in VS 2017.
Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3

Dodatkowe ulepszenia diagnostyki w kompilatorze.Additional improvements to diagnostics in the compiler. Aby uzyskać więcej informacji, zobacz udoskonalenia diagnostyczne w programie Visual Studio 2017 15.3.0.For more information, see Diagnostic Improvements in Visual Studio 2017 15.3.0.

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

Wydajność środowiska uruchomieniowego Visual C++ w dalszym ciągu ulepsza jakość kodu.Visual C++ runtime performance continues to improve through better generated code quality. Teraz możesz po prostu ponownie skompilować kod i aplikacja działała szybciej.Now you can just recompile your code, and your app runs faster. Niektóre optymalizacje kompilatora są zupełnie nowe, takie jak wektoryzacji warunkowych magazynów skalarnych, łączenie wywołań sin(x) i cos(x) nowe sincos(x) oraz Usuwanie nadmiarowych instrukcji z Optymalizatora ochrony zdarzeń.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. Inne optymalizacje kompilatora to ulepszenia istniejących funkcji, takie jak: heurystyka wektoryzator dla wyrażeń warunkowych, lepsza Optymalizacja pętli i zmiennoprzecinkowa minimalna/maksymalna codegena.Other compiler optimizations are improvements to existing functionality, such as: vectorizer heuristics for conditional expressions, better loop optimizations, and float min/max codegen. Konsolidator ma nową i szybszą /OPT:ICF implementację, co może skutkować do 9% przyspieszenia czasu linku i innych poprawek wydajności w konsolidacji przyrostowej.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. Aby uzyskać więcej informacji, zobacz /opt (optymalizacje) i /Incremental (łączenie przyrostowo).For more information, see /OPT (Optimizations) and /INCREMENTAL (Link Incrementally).

Kompilator języka Microsoft C++ obsługuje firmę Intel AVX-512.The Microsoft C++ compiler supports Intel's AVX-512. Zawiera instrukcje długości wektora, które wprowadzają nowe funkcje w AVX-512 do 128-bitowe i 256-bit Wide.It has Vector Length instructions that bring new functions in AVX-512 to 128-bit and 256-bit wide registers.

Opcja /Zc: noexceptTypes — umożliwia przywrócenie do wersji c++ 14 systemu, w którym jest noexcept używany tryb c++ 17.The /Zc:noexceptTypes- option can be used to revert to the C++14 version of noexcept while using C++17 mode in general. Ta opcja umożliwia zaktualizowanie kodu źródłowego tak, aby był zgodny z językiem C++ 17 bez konieczności ponownego pisania całego throw() kodu.This option enables you to update your source code to conform to C++17 without having to rewrite all your throw() code at the same time. Aby uzyskać więcej informacji, zobacz sekcję usuwanie specyfikacji wyjątków dynamicznych i noexcept.For more information, see Dynamic exception specification removal and noexcept.

Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7

Standardowa biblioteka C++C++ standard library

Ulepszenia poprawnościCorrectness Improvements

Visual Studio 2017 RTM (wersja 15,0)Visual Studio 2017 RTM (version 15.0)
  • basic_string _ITERATOR_DEBUG_LEVEL != 0 Ulepszenia diagnostyki pomocniczej.Minor basic_string _ITERATOR_DEBUG_LEVEL != 0 diagnostics improvements. Gdy sprawdzanie IDL jest wyzwalane w maszynach ciągów, będzie teraz raportowane określone zachowanie, które spowodowało wydrukowanie.When an IDL check gets tripped in string machinery, it will now report the specific behavior that caused the trip. Na przykład zamiast komunikatu „iterator ciągu nie umożliwia wyłuskiwania” otrzymasz komunikat „nie można wyłuskać iteratora ciągu, ponieważ jest on poza zakresem (np. iterator końca)”.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)".
  • Naprawiono std::promise operator przypisania przenoszenia, który wcześniej mógłby spowodować zablokowanie kodu na zawsze.Fixed the std::promise move assignment operator, which previously could cause code to block forever.
  • Naprawiono błędy kompilatora z atomic<T*> niejawną konwersją na T* .Fixed compiler errors with the atomic<T*> implicit conversion to T*.
  • pointer_traits<Ptr> teraz poprawnie wykrywane Ptr::rebind<U> .pointer_traits<Ptr> now correctly detects Ptr::rebind<U>.
  • Naprawiono brakujący const kwalifikator w move_iterator operatorze odejmowania.Fixed a missing const qualifier in the move_iterator subtraction operator.
  • Rozwiązano cichą codegeną nieprawidłowym dla stanowych zdefiniowanych przez użytkownika przystawek propagate_on_container_copy_assignment z żądaniem i 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> teraz dopuszczalne są przeciążenia operator&() .atomic<T> now tolerates overloaded operator&().
  • Nieco Ulepszona diagnostyka kompilatora dla nieprawidłowych bind() wywołań.Slightly improved compiler diagnostics for incorrect bind() calls.

Program Visual Studio 2017 RTM zawiera więcej ulepszeń biblioteki standardowej.There are more standard library improvements in Visual Studio 2017 RTM. Aby zapoznać się z pełną listą, zobacz temat poprawki biblioteki standardowej wpisu w blogu dla języka C++ w programie VS 2017 RTM.For a complete list, see the C++ Team Blog entry Standard Library Fixes In VS 2017 RTM.

Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Kontenery biblioteki standardowej teraz zawężają zamiast max_size() numeric_limits<difference_type>::max() max() size_type .Standard library containers now clamp their max_size() to numeric_limits<difference_type>::max() rather than the max() of size_type. Ta zmiana gwarantuje, że wynik distance() iteratorów z tego kontenera jest reprezentowany w zwracanym typie distance() .This change ensures that the result of distance() on iterators from that container is representable in the return type of distance().
  • Naprawiono brak specjalizacji auto_ptr<void> .Fixed missing specialization auto_ptr<void>.
  • for_each_n(), generate_n() , I search_n() algorytmy, które wcześniej nie zostały skompilowane, jeśli długość argumentu nie jest typem całkowitym.The for_each_n(), generate_n(), and search_n() algorithms previously failed to compile if the length argument wasn't an integral type. Teraz staramy się skonwertować długość niecałkowitą do iteratorów difference_type .They now attempt to convert non-integral lengths to the iterators' difference_type.
  • normal_distribution<float> nie emituje już ostrzeżeń wewnątrz standardowej biblioteki o zawężaniu wartości z podwójnej do zmiennoprzecinkowej.normal_distribution<float> no longer emits warnings inside the standard library about narrowing from double to float.
  • Naprawiono niektóre basic_string operacje, które były używane npos zamiast max_size() sprawdzania maksymalnego rozmiaru przepełnienia.Fixed some basic_string operations that used npos instead of max_size() when checking for maximum size overflow.
  • condition_variable::wait_for(lock, relative_time, predicate) czeka na cały relatywny czas, jeśli wystąpił fałszywe Wake.condition_variable::wait_for(lock, relative_time, predicate) would wait for the entire relative time if there was a spurious wake. Teraz czeka tylko na pojedynczy interwał czasu względnego.Now it waits for only a single interval of the relative time.
  • future::get() teraz unieważnia future , zgodnie z wymaganiami standardowymi.future::get() now invalidates the future, as the standard requires.
  • iterator_traits<void *> używany jako twardy błąd, ponieważ próbuje go utworzyć void& ; teraz czyści to pustą strukturę, aby zezwolić na użycie iterator_traits w "ITERATOR" SFINAE warunków.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.
  • Niektóre ostrzeżenia zgłoszone przez Clang -wSystem-Headers zostały naprawione.Some warnings reported by Clang -Wsystem-headers were fixed.
  • Ustalono również "Specyfikacja wyjątku w deklaracji jest niezgodna z poprzednią deklaracją" zgłoszoną przez Clang -wMicrosoft-Exception-spec.Also fixed "exception specification in declaration does not match previous declaration" reported by Clang -Wmicrosoft-exception-spec.
  • Również stałe pamięci podręcznej określania kolejności list raportowane przez Clang i C1XX.Also fixed mem-initializer-list ordering warnings reported by Clang and C1XX.
  • Kontenery nieuporządkowane nie zamieniają swoich funkcji skrótu ani predykatów, gdy same kontenery zostały zamienione.The unordered containers didn't swap their hash functions or predicates when the containers themselves were swapped. Teraz.Now they do.
  • Wiele operacji wymiany kontenera jest teraz oznaczonych noexcept (w przypadku, gdy biblioteka standardowa nigdy nie zamierza zgłosić wyjątku podczas wykrywania propagate_on_container_swap niezdefiniowanego warunku zachowania nierównego alokatora).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).
  • Wiele vector<bool> operacji jest teraz oznaczonych noexcept .Many vector<bool> operations are now marked noexcept.
  • Biblioteka standardowa będzie teraz wymuszać pasujący Alokator value_type (w trybie c++ 17) z wystąpieniem ucieczki.The standard library will now enforce matching allocator value_type (in C++17 mode) with an opt-out escape hatch.
  • Naprawiono niektóre warunki, w których funkcja samodzielnego wstawiania basic_string może zaszyfrować zawartość ciągów.Fixed some conditions where self-range-insert into basic_string would scramble the strings contents. (Uwaga: zestaw samodzielny — Wstawianie do wektorów jest nadal zabroniony przez standard).(Note: self-range-insert into vectors is still prohibited by the Standard.)
  • basic_string::shrink_to_fit() nie ma już wpływ na program przydzielający propagate_on_container_swap .basic_string::shrink_to_fit() is no longer affected by the allocator's propagate_on_container_swap.
  • std::decay obsługuje teraz typy funkcji Abominable, czyli typy funkcji, które są kwalifikowana za kwalifikatorem, lub w obu przypadkach.std::decay now handles abominable function types, that is, function types that are cv-qualified, ref-qualified, or both.
  • Zmieniono dyrektywy include, aby użyć poprawnej czułości wielkości liter i ukośników, co poprawia możliwości przenoszenia.Changed include directives to use proper case sensitivity and forward slashes, improving portability.
  • Stałe ostrzeżenie C4061 "Enumerator" wprzełączniku wyliczeniawyliczeniowy "niejest jawnie obsługiwane przez etykietę case".Fixed warning C4061 "enumerator 'enumerator' in switch of enum 'enumeration' is not explicitly handled by a case label". To ostrzeżenie jest domyślnie wyłączone i zostało naprawione jako wyjątek od ogólnych zasad biblioteki standardowej dla ostrzeżeń.This warning is off-by-default and was fixed as an exception to the standard library's general policy for warnings. (Standardowa biblioteka jest /W4 czysta, ale nie próbuje być /Wall czyste.(The standard library is /W4 clean, but doesn't attempt to be /Wall clean. Wiele ostrzeżeń, które są domyślnie, są niezwykle zakłóceni i nie są przeznaczone do regularnego użycia.Many off-by-default warnings are unusually noisy, and aren't intended to be used on a regular basis.)
  • Udoskonalone std::list testy debugowania.Improved std::list debug checks. Iteratory list sprawdzają teraz operator->() , a list::unique() teraz oznacza Iteratory jako unieważnione.List iterators now check operator->(), and list::unique() now marks iterators as invalidated.
  • Stałe zastosowania-programowanie w programie w programie tuple .Fixed uses-allocator metaprogramming in tuple.
Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5
  • std::partition teraz wywołuje czas predykatu N , a nie N + 1 razy, zgodnie z wymaganiami standardowymi.std::partition now calls the predicate N times instead of N + 1 times, as the standard requires.
  • Program podejmie próbę uniknięcia, że w wersji 15,3 został na15,5 prawiony Magiczna liczba statycznych.Attempts to avoid magic statics in version 15.3 have been repaired in version 15.5.
  • std::atomic<T> nie wymaga już T domyślnego konstrukcyjną.std::atomic<T> no longer requires T to be default constructible.
  • Algorytmy sterty, które mają czas logarytmiczny, zachowują się inaczej po włączeniu debugowania iteratora.Heap algorithms that take logarithmic time behave differently when iterator debugging is enabled. Nie wykonują już jednoliniowej potwierdzenia czasu, że dane wejściowe są w rzeczywistości stertą.They no longer do a linear time assertion that the input is in fact a heap.
  • __declspec(allocator) jest teraz chronione tylko dla C1XX, aby zapobiec występowaniu ostrzeżeń z Clang, które nie rozumie tego declspec.__declspec(allocator) is now guarded for C1XX only, to prevent warnings from Clang, which doesn't understand this declspec.
  • basic_string::npos jest teraz dostępna jako stała czasu kompilacji.basic_string::npos is now available as a compile time constant.
  • std::allocator w trybie C++ 17 poprawnie obsługuje alokację typów nadmiernie wyrównanych, czyli typów, których wyrównanie jest większe niż max_align_t , chyba że jest wyłączone przez /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-. Na przykład wektory obiektów z wyrównaniam 16-bajtowym lub 32-bajtowym są teraz prawidłowo wyrównane do instrukcji SSE i AVX.For example, vectors of objects with 16-byte or 32-byte alignment are now properly aligned for SSE and AVX instructions.

Ulepszenia zgodnościConformance improvements

  • Dodaliśmy <any> , <string_view> , apply() , make_from_tuple() .We added <any>, <string_view>, apply(), make_from_tuple().
  • Dodano <optional> , <variant> , shared_ptr::weak_type , i <cstdalign> .Added <optional>, <variant>, shared_ptr::weak_type, and <cstdalign>.
  • Włączono C++ 14 constexpr w min(initializer_list) , max(initializer_list) , i minmax(initializer_list) ,, min_element() i max_element() 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().

Aby uzyskać więcej informacji, zobacz tabela zgodność języka Microsoft C++.For more information, see Microsoft C++ language conformance table.

Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Wprowadzono kilka dodatkowych funkcji języka C++ 17.Several additional C++17 features have been implemented. Aby uzyskać więcej informacji, zobacz tabela zgodność języka Microsoft C++.For more information, see Microsoft C++ language conformance table.
  • Zaimplementowana P0602R0 "Variant i Optional powinna propagować nieuproszczoność kopiowania/przenoszenia".Implemented P0602R0 "variant and optional should propagate copy/move triviality".
  • Biblioteka standardowa teraz oficjalnie dopuszcza, aby dynamiczne RTTI były wyłączone za pośrednictwem opcji /gr- .The standard library now officially tolerates dynamic RTTI being disabled via the /GR- option. Zarówno, jak i niezależnie dynamic_pointer_cast() rethrow_if_nested() dynamic_cast , więc Biblioteka standardowa oznacza teraz je jako =delete poniżej /GR- .Both dynamic_pointer_cast() and rethrow_if_nested() inherently require dynamic_cast, so the standard library now marks them as =delete under /GR-.
  • Nawet wtedy, gdy dynamiczny RTTI został wyłączony za pośrednictwem /GR- , "static RTTI" w formie typeid(SomeType) jest nadal dostępny i ma kilka składników biblioteki standardowej.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. Biblioteka standardowa obsługuje teraz wyłączenie tej funkcji za pośrednictwem programu /D_HAS_STATIC_RTTI=0 .The standard library now supports disabling this feature too, via /D_HAS_STATIC_RTTI=0. Ta flaga wyłącza również std::any target() target_type() funkcje elementów członkowskich i std::function get_deleter() zaprzyjaźnioną funkcję członkowską i std::shared_ptr std::weak_ptr .This flag also disables 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.
  • Biblioteka standardowa domyślnie używa języka C++ 14 constexpr zamiast wstępnie zdefiniowanych makr.The standard library now uses C++14 constexpr unconditionally, instead of conditionally defined macros.
  • Biblioteka standardowa używa teraz szablonów aliasów wewnętrznie.The standard library now uses alias templates internally.
  • Biblioteka standardowa używa teraz nullptr wewnętrznie, zamiast nullptr_t{} .The standard library now uses nullptr internally, instead of nullptr_t{}. (Zostało wyeliminowane wewnętrzne użycie wartości NULL.(Internal usage of NULL has been eradicated. Wewnętrzne użycie 0-jako-null jest czyszczone stopniowo.)Internal usage of 0-as-null is being cleaned up gradually.)
  • Biblioteka standardowa jest teraz używana std::move() wewnętrznie zamiast stylistically std::forward() .The standard library now uses std::move() internally, instead of stylistically misusing std::forward().
  • Zmieniono static_assert(false, "message") na #error message .Changed static_assert(false, "message") to #error message. Ta zmiana poprawia diagnostykę kompilatora, ponieważ #error natychmiast kończy kompilację.This change improves compiler diagnostics because #error immediately stops compilation.
  • Standardowa biblioteka nie oznacza już funkcji jako __declspec(dllimport) .The standard library no longer marks functions as __declspec(dllimport). Nowoczesne technologie konsolidatora nie wymagają już tego.Modern linker technology no longer requires it.
  • Wyodrębniono SFINAE do domyślnych argumentów szablonu, które zmniejszają bałagan w porównaniu z typami zwracanymi i typami argumentów funkcji.Extracted SFINAE to default template arguments, which reduced clutter compared to return types and function argument types.
  • Testy debugowania w <random> tym teraz używają zwykłych maszyn w bibliotece standardowej zamiast funkcji wewnętrznej _Rng_abort() , która jest wywoływana fputs() do 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. Implementacja tej funkcji została zatrzymana na potrzeby zgodności binarnej.This function's implementation has been kept for binary compatibility. Usuniemy ją w następnej binarnej niezgodnej wersji biblioteki standardowej.We'll remove it in the next binary-incompatible version of the standard library.
Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5
  • Niektóre funkcje biblioteki standardowej zostały dodane, wycofane lub usunięte zgodnie ze standardem C++ 17.Several standard library features have been added, deprecated, or removed per the C++17 standard. Aby uzyskać więcej informacji, zobacz ulepszenia zgodności języka C++ w programie Visual Studio.For more information, see C++ conformance improvements in Visual Studio.
  • Eksperymentalna obsługa następujących algorytmów równoległych:Experimental support for the following parallel algorithms:
    • all_of
    • any_of
    • for_each
    • for_each_n
    • none_of
    • reduce
    • replace
    • replace_if
    • sort
  • W tym momencie są dodawane podpisy dla następujących algorytmów równoległych.The signatures for the following parallel algorithms are added but not parallelized at this time. Profilowanie nie wykazało korzyści w algorytmach przekształcają, które tylko przesuwają lub Permute — elementy: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
Visual Studio 2017, wersja 15.6Visual Studio 2017 version 15.6
  • <memory_resource>
  • Podstawowe informacje o bibliotece v1Library Fundamentals V1
  • Usuwanie polymorphic_allocator przypisaniaDeleting polymorphic_allocator assignment
  • Ulepszanie odejmowania argumentów szablonu klasyImproving class template argument deduction
Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7
  • Obsługa algorytmów równoległych nie jest już eksperymentalnaSupport for parallel algorithms is no longer experimental
  • Nowa implementacja programu <filesystem>A new implementation of <filesystem>
  • Konwersje elementarne ciągów (częściowa)Elementary string conversions (partial)
  • std::launder()
  • std::byte
  • hypot(x,y,z)
  • Uniknięcie niepotrzebnego uszkodzeniaAvoiding unnecessary decay
  • Specjalne funkcje matematyczneMathematical special functions
  • constexpr char_traits
  • Wskazówki dotyczące odejmowania dla standardowej bibliotekiDeduction guides for the standard library

Aby uzyskać więcej informacji, zobacz tabela zgodność języka Microsoft C++.For more information, see Microsoft C++ language conformance table.

Poprawki wydajności i przepływnościPerformance and throughput fixes

  • Wykonane basic_string::find(char) przeciążenia tylko traits::find raz.Made basic_string::find(char) overloads only call traits::find once. Wcześniej była zaimplementowana jako ogólne wyszukiwanie ciągu dla ciągu o długości 1.Previously, it was implemented as a general string search for a string of length 1.
  • basic_string::operator== teraz sprawdza rozmiar ciągu przed porównaniem zawartości ciągów.basic_string::operator== now checks the string's size before comparing the strings' contents.
  • Usunięto sprzężenie kontrolne w basic_string , które było trudne do analizowania przez optymalizator kompilatora.Removed control coupling in basic_string, which was difficult for the compiler optimizer to analyze. W przypadku wszystkich krótkich ciągów wywoływanie reserve nadal ma koszt różny od zera.For all short strings, calling reserve still has a nonzero cost to do nothing.
  • std::vector został przekroczony w celu poprawienia i wydajności: aliasowanie podczas operacji INSERT i emplace jest teraz prawidłowo obsługiwane zgodnie z wymogami standardu, silna gwarancja wyjątku jest teraz dostępna w przypadku, gdy jest to wymagane przez standard za pośrednictwem move_if_noexcept() i innych logiki, a następnie INSERT i emplace do mniejszej liczby operacji elementu.std::vector has been overhauled for correctness and performance: aliasing during insert and emplace operations 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 insert and emplace do fewer element operations.
  • Biblioteka standardowa języka C++ pozwala teraz uniknąć usuwania odwołań do pustych wskaźników.The C++ standard library now avoids dereferencing null fancy pointers.
  • Zwiększona weak_ptr::lock() wydajność.Improved weak_ptr::lock() performance.
  • Aby zwiększyć przepływność kompilatora, nagłówki standardowej biblioteki C++ można teraz uniknąć uwzględniania deklaracji niezbędnych funkcji wewnętrznych kompilatora.To increase compiler throughput, C++ standard library headers now avoid including declarations for unnecessary compiler intrinsics.
  • Ulepszona wydajność std::string std::wstring konstruktorów i przenoszenie ich przez więcej niż trzy razy.Improved the performance of std::string and std::wstring move constructors by more than three times.
Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Praca z usługą noexcept , która uniemożliwiła std::atomic wprowadzanie implementacji do funkcji, które korzystają z obsługi wyjątków strukturalnych (SEH).Worked around interactions with noexcept, which prevented inlining the std::atomic implementation into functions that use Structured Exception Handling (SEH).
  • Zmieniono wewnętrzną funkcję biblioteki standardowej _Deallocate() , aby zoptymalizować do mniejszego kodu, co pozwala na przekreślenie do większej liczby miejsc.Changed the standard library's internal _Deallocate() function to optimize into smaller code, allowing it to be inlined into more places.
  • Zmieniono std::try_lock() , aby użyć rozwinięcia pakietu zamiast rekursji.Changed std::try_lock() to use pack expansion instead of recursion.
  • Ulepszono std::lock() algorytm unikania zakleszczenia w celu używania lock() operacji zamiast obracania na try_lock() wszystkie blokady.Improved the std::lock() deadlock avoidance algorithm to use lock() operations instead of spinning on try_lock() on all the locks.
  • Włączono optymalizację nazwanej wartości zwracanej w system_category::message() .Enabled the Named Return Value Optimization in system_category::message().
  • conjunction i disjunction teraz można tworzyć wystąpienia N + 1 typów, a nie 2N + 2 typy.conjunction and disjunction now instantiate N + 1 types, instead of 2N + 2 types.
  • std::function nie jest już tworzone Tworzenie wystąpienia maszyn obsługi programu przydzielania dla każdego typu, który został wymazany, zwiększona przepływność i zmniejszenie rozmiaru. obj w programach, które przechodzą wiele różnych wyrażeń lambda do 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> zawiera ręcznie nieliniowe std::allocator operacje, zmniejszając rozmiar kodu w kodzie, który współdziała z std::allocator allocator_traits , tylko (czyli w większości kodu).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).
  • Interfejs języka C++ 11 o minimalnym przydziałaniu jest teraz obsługiwany przez standardową metodę wywoływania allocator_traits bezpośrednio, zamiast zawijania alokatora w klasie wewnętrznej _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. Ta zmiana powoduje zmniejszenie rozmiaru kodu wygenerowanego na potrzeby obsługi alokatora, usprawnia w niektórych przypadkach możliwości Optymalizatora dotyczące kontenerów standardowej biblioteki, a także udostępnia lepsze środowisko debugowania (ponieważ teraz można zobaczyć typ alokatora, a nie _Wrap_alloc<your_allocator_type> w debugerze).This change 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).
  • Usunięto Programowanie dla dostosowań allocator::reference , które nie mogą być dostosowywane przez przydzielenie.Removed metaprogramming for customized allocator::reference, which allocators aren't allowed to customize. (Przydzielenie mogą sprawić, że kontenery korzystają z ozdobnych wskaźników, ale nie są to odwołania ozdobne).(Allocators can make containers use fancy pointers but not fancy references.)
  • Fronton kompilatora był sposobem na odwinięcie iteratorów debugowania w oparciu o pętle, zwiększając wydajność kompilacji debugowania.The compiler front end was taught to unwrap debug iterators in range-based for loops, improving the performance of debug builds.
  • basic_stringWewnętrzna ścieżka zmniejszania dla shrink_to_fit() i reserve() nie jest już ścieżką do ponownej alokacji operacji, co zmniejsza rozmiar kodu dla wszystkich mutacji elementów członkowskich.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_stringWewnętrzna ścieżka wzrostu nie znajduje się już w ścieżce shrink_to_fit() .The basic_string internal grow path is no longer in the path of shrink_to_fit().
  • basic_stringOperacje zmieniania są teraz uwzględniane w niealokowanej szybkiej ścieżce i przydzielaniu funkcji wolnych ścieżek, co jest bardziej podobne dla wspólnych przypadków bez ponownego przydzielenia.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_stringOperacje mutacji teraz konstruują ponownie przydzieloną bufory w preferowanym stanie zamiast zmieniać rozmiar w miejscu.The basic_string mutating operations now construct reallocated buffers in the preferred state rather than resizing in place. Na przykład Wstaw na początku ciągu teraz przenosi zawartość po wstawieniu dokładnie jeden raz.For example, an insert at the beginning of a string now moves the content after the insertion exactly once. Jest on przenoszony w dół lub do nowo przydzielonych buforów.It's moved either down or to the newly allocated buffer. Nie jest już dwukrotnie przenoszona w przypadku ponownej alokacji, najpierw do nowo przydzielonych buforów, a następnie w dół.It's no longer moved twice in the reallocating case, first to the newly allocated buffer and then down.
  • Operacje wywołujące w pamięci podręcznej standardowej biblioteki języka C w tym <string> momencie errno umożliwiają usunięcie powtórzonej interakcji z protokołem TLS.Operations calling the C standard library in <string> now cache the errno address to remove repeated interaction with TLS.
  • Uproszczona is_pointer implementacja.Simplified the is_pointer implementation.
  • Zakończono zmianę wyrażenia opartego na funkcji SFINAE na struct i void_t -based.Finished changing function-based Expression SFINAE to struct and void_t-based.
  • Algorytmy biblioteki standardowej teraz unikają iteratorów postincrementing.Standard library algorithms now avoid postincrementing iterators.
  • Stałe ostrzeżenia obcinania w przypadku korzystania z 32-bitowych przystawek w systemach 64-bitowych.Fixed truncation warnings when using 32-bit allocators on 64-bit systems.
  • std::vector przypisanie przenoszenia jest teraz bardziej wydajne w przypadku niePOCMAego przypadku alokatora, gdy jest to możliwe.std::vector move assignment is now more efficient in the non-POCMA non-equal-allocator case, by reusing the buffer when possible.
Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5
  • basic_string<char16_t> teraz angażuje te same memcmp , memcpy i podobne optymalizacje, które są basic_string<wchar_t> zaangażowane.basic_string<char16_t> now engages the same memcmp, memcpy, and similar optimizations that basic_string<wchar_t> engages.
  • Ograniczenie Optymalizatora, które uniemożliwiło wbudowanie wskaźników funkcji, uwidacznianych przez nasze działania "Unikaj kopiowania funkcji" w programie Visual Studio 2015 Update 3, już pracowało, przywracając wydajność programu lower_bound(iter, iter, function pointer) .An optimizer limitation that 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).
  • Narzuty weryfikacji kolejności debugowania iteratora danych wejściowych do includes , set_difference , set_symmetric_difference i set_union zostało zmniejszone przez odpakowanie iteratorów przed sprawdzeniem kolejności.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 teraz pomija elementy, które już znajdują się na pozycji.std::inplace_merge now skips over elements that are already in position.
  • Konstruowanie std::random_device nie powoduje już konstrukcji, a następnie niszczy std::string .Constructing std::random_device no longer constructs and then destroys a std::string.
  • std::equal i std::partition miała przebieg optymalizacji obejmujących wielowątkowość, która zapisuje porównanie iteratora.std::equal and std::partition had a jump-threading optimization pass that saves an iterator comparison.
  • Gdy program std::reverse przekazuje wskaźniki, aby można je było z nich skopiować T , będzie teraz wysyłany do implementacji rozpisanych ręcznie.When std::reverse is passed pointers to trivially copyable T, it will now dispatch to a handwritten vectorized implementation.
  • std::fill, std::equal i std::lexicographical_compare były to metody wysyłania do memset i memcmp dla std::byte i gsl::byte (oraz innych wyliczeń i typów wyliczeniowych takich jak).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). Ponieważ std::copy są wysyłane przy użyciu is_trivially_copyable , nie wymaga żadnych zmian.Since std::copy dispatches using is_trivially_copyable, it didn't need any changes.
  • Biblioteka standardowa nie zawiera już pustych nawiasów klamrowych, których jedynym zachowaniem było dokonanie, że typy nie zniszczalnych.The standard library no longer contains empty-braces destructors whose only behavior was to make types non-trivially-destructible.

Inne bibliotekiOther Libraries

Obsługa biblioteki Open SourceOpen-source library support

Vcpkg to narzędzie wiersza polecenia typu open source, które znacznie upraszcza proces pozyskiwania i tworzenia statycznych libs i bibliotek DLL typu open source w programie 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. Aby uzyskać więcej informacji, zobacz vcpkg: A Package Manager for C++.For more information, see vcpkg: A package manager for C++.

CPPRest SDK 2.9.0CPPRest SDK 2.9.0

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

CPPRestSDK, Międzyplatformowy interfejs API sieci Web dla języka C++, został zaktualizowany do wersji 2.9.0.The CPPRestSDK, a cross-platform web API for C++, has been updated to version 2.9.0. Aby uzyskać więcej informacji, zobacz CppRestSDK 2.9.0 jest dostępny w witrynie GitHub.For more information, see CppRestSDK 2.9.0 is available on GitHub.

ATLATL

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5
  • Jeszcze inny zestaw poprawek zgodności z wyszukiwaniem nazwYet another set of name-lookup conformance fixes
  • Istniejące konstruktory przenoszenia i operatory przypisania przenoszenia są teraz prawidłowo oznaczone jako niezgłaszaneExisting move constructors and move assignment operators are now properly marked as non-throwing
  • Nie pomijaj prawidłowego ostrzeżenia C4640 o inicjacji bezpiecznego wątku lokalnych elementów statycznych w pliku atlstr. hUnsuppress valid warning C4640 about thread safe init of local statics in atlstr.h
  • Inicjowanie bezpiecznego wątku lokalnych elementów statycznych zostało automatycznie wyłączone w zestawie narzędzi systemu XP podczas tworzenia biblioteki DLL przy użyciu biblioteki ATL.Thread-safe initialization of local statics was automatically turned off in the XP toolset when using ATL to build a DLL. Teraz nie jest.Now it's not. Możesz dodać /Zc:threadSafeInit- w ustawieniach projektu, jeśli nie chcesz, aby inicjowanie nie było bezpieczne dla wątków.You can add /Zc:threadSafeInit- in your Project settings if you don't want thread-safe initialization.

Środowisko uruchomieniowe Visual C++Visual C++ runtime

  • Nowy nagłówek "cfguard. h" dla symboli ochrony przepływu sterowania.New header "cfguard.h" for Control Flow Guard symbols.

Środowisko IDE programu Visual Studio 2017 C++Visual Studio 2017 C++ IDE

  • Wydajność wprowadzania zmian w konfiguracji jest teraz lepsza w przypadku natywnych projektów w języku C++ i o wiele lepsza w projektach C++/CLI.Configuration change performance is now better for C++ native projects and much better for C++/CLI projects. Gdy konfiguracja rozwiązania jest uaktywniana po raz pierwszy, będzie ona teraz szybsza i wszystkie późniejsze aktywacje konfiguracji rozwiązania będą prawie natychmiastowo.When a solution configuration is activated for the first time, it will now be faster, and all later activations of this solution configuration will be almost instantaneous.
Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Ponownie napisano kilka kreatorów projektu i kodów w stylu okna dialogowego podpisu.Several project and code wizards have been rewritten in the signature dialog style.
  • Dodaj klasę teraz uruchamia Kreatora dodawania klasy bezpośrednio.Add Class now launches the Add Class wizard directly. Wszystkie inne elementy, które wcześniej znajdowały się w tym miejscu, są teraz dostępne w obszarze dodaj > nowy element.All of the other items that were previously here are now available under Add > New Item.
  • Projekty Win32 znajdują się teraz w kategorii pulpitu systemu Windows w oknie dialogowym Nowy projekt .Win32 projects are now under the Windows Desktop category in the New Project dialog.
  • Szablony konsoli systemu Windows i aplikacji klasycznych teraz tworzą projekty bez wyświetlania kreatora.The Windows Console and Desktop Application templates now create the projects without displaying a wizard. W tej samej kategorii jest dostępny nowy Kreator pulpitu systemu Windows , w którym są wyświetlane te same opcje, co w przypadku starego kreatora aplikacji konsolowej Win32 .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, wersja 15.5Visual Studio 2017 version 15.5

Kilka operacji języka C++, które używają aparatu IntelliSense do refaktoryzacji i nawigowania po kodzie przebiega znacznie szybciej.Several C++ operations that use the IntelliSense engine for refactoring and code navigation run much faster. Następujące numery opierają się na rozwiązaniu Visual Studio chrom z projektami 3500:The following numbers are based on the Visual Studio Chromium solution with 3500 projects:

CechyFeature Poprawa wydajnościPerformance Improvement
Zmień nazwęRename 5.3 x5.3x
Zmień sygnaturęChange Signature 4,5 x4.5x
Znajdź wszystkie odwołaniaFind All References 4,7 x4.7x

Język C++ obsługuje teraz kombinację klawiszy Ctrl + kliknij Przejdź do definicji, dzięki czemu można łatwo dołączać do definicji myszą.C++ now supports Ctrl+Click Go To Definition, making mouse navigation to definitions easy. Wizualizator struktury z pakietu narzędzi do wydajnej wydajności jest teraz również uwzględniony w produkcie.The Structure Visualizer from the Productivity Power Tools pack is now also included in the product by default.

IntelliSenseIntelliSense

  • Nowy aparat bazy danych oparty na SQLite jest teraz używany domyślnie.The new SQLite-based database engine is now being used by default. Nowy aparat przyspiesza operacje bazy danych, takie jak Przejdź do definicji i Znajdź wszystkie odwołania.The new engine speeds up database operations like Go To Definition and Find All References. Znacznie poprawia początkowy czas analizy rozwiązania.It significantly improves initial solution parse time. Ustawienie zostało przeniesione do narzędzi > opcje > Edytor tekstu > C/C++ > zaawansowane.The setting has moved to Tools > Options > Text Editor > C/C++ > Advanced. (Dawniej była w... Język C/C++ > eksperymentalne).(It was formerly under ...C/C++ > Experimental.)

  • Ulepszono wydajność IntelliSense w projektach i plikach, które nie używają prekompilowanych nagłówków — automatycznie prekompilowany nagłówek zostanie utworzony dla nagłówków w bieżącym pliku.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.

  • Do listy błędów dodaliśmy filtrowanie błędów i pomoc dotyczącą błędów funkcji IntelliSense.We've added error filtering and help for IntelliSense errors in the error list. Kliknięcie kolumny błędów umożliwia teraz filtrowanie.Clicking on the error column now allows for filtering. Ponadto kliknięcie konkretnego błędu lub naciśnięcie klawisza F1 uruchamia wyszukiwanie online dotyczące danego komunikatu o błędzie.Also, clicking on the specific errors or pressing F1 will launch an online search for the error message.

    Lista błędówError List

    Filtrowana lista błędówError List Filtered

  • Dodano możliwość filtrowania listy elementów członkowskich według rodzaju.Added the ability to filter Member List items by kind.

    Filtrowanie listy elementów członkowskichMember List Filtering

  • Dodano nową eksperymentalną funkcję IntelliSense predykcyjną, która zapewnia kontekstowe Filtrowanie elementów wyświetlanych na liście elementów członkowskich.Added a new experimental Predictive IntelliSense feature that provides contextually aware filtering of what appears in the Member List. Aby uzyskać więcej informacji, zobacz C++ IntelliSense — udoskonalenia — Przewidywalność & IntelliSense.For more information, see C++ IntelliSense Improvements - Predictive IntelliSense & Filtering.

  • Funkcja Znajdź wszystkie odwołania (Shift + F12) teraz ułatwia łatwe poruszanie się, nawet w złożonych bazach kodu.Find All References (Shift+F12) now helps you get around easily, even in complex codebases. Zapewnia zaawansowane grupowanie, filtrowanie, sortowanie, wyszukiwanie w wynikach i (w przypadku niektórych języków) kolorowanie, dzięki czemu można jasno zrozumieć odwołania.It provides advanced grouping, filtering, sorting, searching within results, and (for some languages) colorization, so you can get a clear understanding of your references. W przypadku języka C++ nowy interfejs użytkownika zawiera informacje o tym, czy odczytujemy lub zapisujesz do zmiennej.For C++, the new UI includes information about whether we're reading from or writing to a variable.

  • Funkcja zmiany kropki na strzałkę IntelliSense została przeniesiona z doświadczalnych do zaawansowanych i teraz jest domyślnie włączona.The Dot-to-Arrow IntelliSense feature has been moved from experimental to advanced, and is now enabled by default. Funkcje edytora rozszerzają zakresy i pierwszeństwo rozwijania są również przenoszone z eksperymentalnego do zaawansowanego.The editor features Expand Scopes and Expand Precedence have also been moved from experimental to advanced.

  • Eksperymentalne funkcje refaktoryzacji Zmień podpis i Wyodrębnij funkcję są teraz dostępne domyślnie.The experimental refactoring features Change Signature and Extract Function are now available by default.

  • Dodano funkcję eksperymentalnego "szybszego ładowania projektu" dla projektów języka C++.Added an experimental 'Faster project load' feature for C++ projects. Przy następnym otwarciu projektu w języku C++ będzie on ładować się szybciej, a po tym czasie zostanie znacznie szybszy.The next time you open a C++ project it will load faster, and the time after that it will load much faster!

  • Niektóre z tych funkcji są wspólne dla innych języków, a niektóre z nich są specyficzne dla języka C++.Some of these features are common to other languages, and some are specific to C++. Aby uzyskać więcej informacji o tych nowych funkcjach, zobacz temat ogłaszanie programu Visual Studio "15" (wersja zapoznawcza 5).For more information about these new features, see Announcing Visual Studio "15" Preview 5.

Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7

Projekty inne niż MSBuild z otwartym folderemNon-MSBuild projects with Open Folder

W programie Visual Studio 2017 wprowadzono funkcję Otwórz folder .Visual Studio 2017 introduces the Open Folder feature. Umożliwia to kod, kompilację i debugowanie w folderze zawierającym kod źródłowy bez konieczności tworzenia jakichkolwiek rozwiązań i projektów.It enables you to code, build, and debug in a folder containing source code without the need to create any solutions or projects. Teraz znacznie prostsze jest rozpoczęcie pracy z programem Visual Studio, nawet jeśli projekt nie jest projektem opartym na programie MSBuild.Now it's much simpler to get started with Visual Studio, even if your project isn't an MSBuild-based project. Funkcja Otwórz folder zapewnia dostęp do zaawansowanych funkcji interpretacji kodu, edytowania, kompilowania i debugowania.Open Folder gives you access to powerful code understanding, editing, building, and debugging capabilities. Są one takie same, jak program Visual Studio udostępnia już projekty MSBuild.They're the same ones that Visual Studio already provides for MSBuild projects. Aby uzyskać więcej informacji, zobacz Otwieranie projektów folderu dla języka C++.For more information, see Open Folder projects for C++.

  • Ulepszenia obsługi polecenia Otwórz folder.Improvements to the Open Folder experience. Środowisko można dostosować za pomocą tych plików JSON:You can customize the experience through these .json files:
    • CppProperties.json dostosowuje obsługę funkcji IntelliSense i przeglądania.CppProperties.json to customize the IntelliSense and browsing experience.
    • Tasks.json dostosowuje kroki kompilacji.Tasks.json to customize the build steps.
    • Launch.json dostosowuje obsługę debugowania.Launch.json to customize the debugging experience.
Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Ulepszona obsługa alternatywnych kompilatorów i środowisk kompilacji, takich jak MinGW i Cygwin.Improved support for alternative compilers and build environments such as MinGW and Cygwin. Aby uzyskać więcej informacji, zobacz Używanie MinGW i Cygwin z Visual C++ i otwartym folderem.For more information, see Using MinGW and Cygwin with Visual C++ and Open Folder.
  • Dodano obsługę definiowania zmiennych środowiskowych globalnych i specyficznych dla konfiguracji w CppProperties.jsna i CMakeSettings.js.Added support to define global and configuration-specific environment variables in CppProperties.json and CMakeSettings.json. Te zmienne środowiskowe mogą być używane przez konfiguracje debugowania zdefiniowane w launch.vs.jsna i zadania w tasks.vs.jsna.These environment variables can be consumed by debug configurations defined in launch.vs.json and tasks in tasks.vs.json. Aby uzyskać więcej informacji, zobacz Dostosowywanie środowiska przy użyciu Visual C++ i otwartych folderów.For more information, see Customizing your Environment with Visual C++ and Open Folder.
  • Ulepszona obsługa generatora Ninja programu CMake, w tym możliwość łatwego kierowania platform 64-bitowych.Improved support for CMake's Ninja generator, including the ability to easily target 64-bit platforms.

Obsługa CMake za pośrednictwem otwartego folderuCMake support via Open Folder

Program Visual Studio 2017 wprowadza obsługę projektów CMake bez konwertowania na pliki projektu MSBuild (. vcxproj).Visual Studio 2017 introduces support for using CMake projects without converting to MSBuild project files (.vcxproj). Aby uzyskać więcej informacji, zobacz CMAKE projects in Visual Studio.For more information, see CMake projects in Visual Studio. Otwieranie projektów CMake z otwartym folderem automatycznie konfiguruje środowisko do edytowania, kompilowania i debugowania języka C++.Opening CMake projects with Open Folder automatically configures the environment for C++ editing, building, and debugging.

  • Funkcja IntelliSense języka C++ działa bez konieczności tworzenia CppProperties.jsw pliku w folderze głównym.C++ IntelliSense works without the need to create a CppProperties.json file in the root folder. Dodano również nową listę rozwijaną, aby umożliwić użytkownikom łatwe przełączanie się między konfiguracjami dostarczonymi przez CMake i CppProperties.jsna plikach.We've also added a new dropdown to allow users to easily switch between configurations provided by CMake and CppProperties.json files.

  • Dalsza konfiguracja jest obsługiwana przy użyciu pliku CMakeSettings.json, który znajduje się w tym samym folderze co plik CMakeLists.txt.Further configuration is supported via a CMakeSettings.json file that sits in the same folder as the CMakeLists.txt file.

    CMake Otwórz folderCMake Open Folder

Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Dodano obsługę generatora Ninja CMake.Support added for the CMake Ninja generator.
Visual Studio 2017, wersja 15.4Visual Studio 2017 version 15.4
  • Dodano obsługę importowania istniejących pamięci podręcznych CMake.Support added for importing existing CMake caches.
Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

Tworzenie aplikacji klasycznych systemu WindowsWindows desktop development

Zapewniamy obecnie bardziej zaawansowane środowisko instalacji oryginalnego obciążenia C++.We now provide a more granular installation experience for installing the original C++ workload. Dodaliśmy możliwe do wybrania składniki pozwalające na zainstalowanie tylko tych narzędzi, których potrzebujesz.We have added selectable components that enable you to install just the tools that you need. Wskazane rozmiary instalacji składników wymienionych w interfejsie użytkownika Instalatora są nieprawidłowe i nieszacunkowo łączny rozmiar.The indicated installation sizes for the components listed in the installer UI are incorrect, and underestimate the total size.

Aby pomyślnie tworzyć projekty Win32 w obciążeniu C++ dla komputerów stacjonarnych, musisz zainstalować zarówno zestaw narzędzi, jak i zestaw SDK systemu Windows.To successfully create Win32 projects in the C++ desktop workload, you must install both a toolset and a Windows SDK. Zainstaluj zalecane (wybrane) składniki programu VC + + 2017 najnowsze 141 zestaw narzędzi (x86, x64) i Windows 10 SDK (10.0. nnnnn) , aby upewnić się, że działa.Install the recommended (selected) components VC++ 2017 v141 toolset (x86, x64) and Windows 10 SDK (10.0.nnnnn) to make sure it works. Jeśli niezbędne narzędzia nie są zainstalowane, projekty nie zostaną utworzone pomyślnie, a Kreator przestanie odpowiadać.If the necessary tools aren't installed, projects won't be created successfully, and the wizard will stop responding.

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

Narzędzia kompilacji Visual C++ (wcześniej dostępne jako produkt autonomiczny) są teraz uwzględniane jako obciążenie w Instalator programu Visual Studio.The Visual C++ Build tools (previously available as a standalone product) are now included as a workload in the Visual Studio Installer. To obciążenie powoduje zainstalowanie tylko narzędzi wymaganych do kompilowania projektów C++ bez instalowania środowiska IDE programu Visual Studio.This workload installs only the tools required to build C++ projects without installing the Visual Studio IDE. Dostępne są zarówno zestawy narzędzi wersji 140, jak i najnowsze 141.Both the v140 and v141 toolsets are included. Zestaw narzędzi najnowsze 141 zawiera najnowsze ulepszenia programu Visual Studio 2017 w wersji 15,5.The v141 toolset contains the latest improvements in Visual Studio 2017 version 15.5. Aby uzyskać więcej informacji, zobacz Visual Studio Build Tools teraz obejmują zestawy narzędzi program VS2017 i programu VS2015 MSVC.For more information, see Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets.

Programowanie dla systemu Linux w języku C++Linux development with C++

Popularne rozszerzenie Visual C++ for Linux Development stanowi obecnie cześć programu Visual Studio.The popular extension Visual C++ for Linux Development is now part of Visual Studio. Ta instalacja zawiera wszystko, czego potrzebujesz do tworzenia i debugowania aplikacji w języku C++ działających w środowisku systemu Linux.This installation provides everything you need to develop and debug C++ applications running on a Linux environment.

Program Visual Studio 2017 w wersji 15.2Visual Studio 2017 version 15.2

Wprowadzono ulepszenia w zakresie udostępniania kodu dla wielu platform i wizualizacji typów.Improvements have been made in cross-platform code sharing and type visualization. Aby uzyskać więcej informacji, zobacz temat udoskonalenia systemu Linux C++ na potrzeby udostępniania kodu międzyplatformowego i wizualizacji typu.For more information, see Linux C++ improvements for cross-platform code sharing and type visualization.

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5
  • W obciążeniu systemu Linux dodano obsługę rsync jako alternatywę dla protokołu SFTP do synchronizowania plików na zdalnych maszynach z systemem Linux.The Linux workload has added support for rsync as an alternative to sftp for synchronizing files to remote Linux machines.
  • Dodano obsługę dla mikrokontrolerów ARM dla kompilacji krzyżowej.Support is added for cross compilation targeting ARM microcontrollers. Aby włączyć ją w instalacji, wybierz pozycję Programowanie dla systemu Linux przy użyciu języka C++ i wybierz opcję tworzenia aplikacji osadzonych i IoT.To enable it in the installation, choose the Linux development with C++ workload and select the option for Embedded and IoT Development. Ta opcja umożliwia dodanie narzędzi do kompilacji krzyżowej ARM i dokonanie instalacji.This option adds the ARM GCC cross compilation tools and Make to your installation. Aby uzyskać więcej informacji, zobacz kompilacja między różnymi platformami w programie Visual Studio.For more information, see ARM GCC Cross Compilation in Visual Studio.
  • Dodano obsługę dla CMake.Support added for CMake. Teraz można korzystać z istniejącej bazy kodu CMake bez konieczności konwertowania jej na projekt programu Visual Studio.You can now work on your existing CMake code base without having to convert it to a Visual Studio project. Aby uzyskać więcej informacji, zobacz Konfigurowanie projektu systemu Linux CMAKE.For more information, see Configure a Linux CMake Project.
  • Dodano obsługę uruchamiania zadań zdalnych.Support added for running remote tasks. Ta funkcja umożliwia uruchamianie dowolnego polecenia w systemie zdalnym, który jest zdefiniowany w Menedżerze połączeń programu Visual Studio.This capability allows you to run any command on a remote system that is defined in Visual Studio's Connection Manager. Zadania zdalne zapewniają również możliwość kopiowania plików do systemu zdalnego.Remote tasks also provide the capability to copy files to the remote system. Aby uzyskać więcej informacji, zobacz Konfigurowanie projektu systemu Linux CMAKE.For more information, see Configure a Linux CMake Project.
Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7

Programowanie gier w języku C++Game development with C++

Pełnych możliwości języka C++ można użyć do tworzenia profesjonalnych gier obsługiwanych przy użyciu zestawu funkcji DirectX lub Cocos2d.Use the full power of C++ to build professional games powered by DirectX or Cocos2d.

Programowanie aplikacji mobilnych za pomocą języka C++ dla systemów Android i iOSMobile development with C++ for Android and iOS

Program Visual Studio umożliwia obecnie programowanie i debugowanie aplikacji mobilnych przeznaczonych dla systemów Android oraz iOS.You can now create and debug mobile apps using Visual Studio that can target Android and iOS.

Aplikacje uniwersalne systemu WindowsUniversal Windows Apps

Język C++ stanowi składnik opcjonalny obciążenia Aplikacja uniwersalna systemu Windows.C++ comes as an optional component for the Universal Windows App workload. Obecnie należy ręcznie uaktualnić projekty w języku C++.Currently, you must upgrade C++ projects manually. Możesz otworzyć projekt platforma uniwersalna systemu Windows przeznaczony dla wersji 140 w programie Visual Studio 2017.You can open a v140-targeted Universal Windows Platform project in Visual Studio 2017. Należy jednak wybrać zestaw narzędzi platformy najnowsze 141 na stronach właściwości projektu, jeśli nie masz zainstalowanego programu Visual Studio 2015.However, you need to select the v141 platform toolset in the project property pages if you don't have Visual Studio 2015 installed.

Nowe opcje dla języka C++ w platforma uniwersalna systemu Windows (platformy UWP)New options for C++ on Universal Windows Platform (UWP)

Dostępne są teraz nowe opcje pisania i pakowania aplikacji C++ dla platforma uniwersalna systemu Windows i sklepu Windows: infrastruktura mostka dla komputerów stacjonarnych umożliwia spakowanie istniejącej aplikacji klasycznej lub obiektu COM do wdrożenia za pomocą Sklepu Windows.You now have new options for writing and packaging C++ applications for the Universal Windows Platform and the Windows Store: The Desktop Bridge infrastructure lets you package your existing desktop application or COM object for deployment through the Windows Store. Lub, w przypadku wdrażania za pośrednictwem istniejących kanałów za pośrednictwem ładowania bezpośredniego.Or, for deployment through your existing channels via side-loading. Nowe funkcje w systemie Windows 10 umożliwiają dodawanie funkcji platformy UWP do aplikacji klasycznych na różne sposoby.New capabilities in Windows 10 enable you to add UWP functionality to your desktop application in various ways. Aby uzyskać więcej informacji, zobacz mostek Desktop.For more information, see Desktop Bridge.

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

Zostanie dodany szablon projektu pakietu aplikacji systemu Windows , który znacznie upraszcza pakowanie aplikacji klasycznych za pomocą mostka programu Desktop.A Windows Application Packaging Project project template is added, which greatly simplifies packaging of desktop applications with Desktop Bridge. Jest on dostępny w pliku | Nowy | Projekt | Zainstalowane | Visual C++ | Platforma uniwersalna systemu Windows.It's available under File | New | Project | Installed | Visual C++ | Universal Windows Platform. Aby uzyskać więcej informacji, zobacz pakowanie aplikacji za pomocą programu Visual Studio (mostek Desktop).For more information, see Package an app by using Visual Studio (Desktop Bridge).

Podczas pisania nowego kodu można teraz używać języka C++/WinRT, czyli standardowego rzutu języka C++ dla środowisko wykonawcze systemu Windows zaimplementowane wyłącznie w plikach nagłówkowych.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żliwia korzystanie z interfejsów API środowisko wykonawcze systemu Windows i tworzenie ich przy użyciu dowolnych zgodnych ze standardami kompilatora języka C++.It allows you to consume and author Windows Runtime APIs using any standards-compliant C++ compiler. Język c++/WinRT został zaprojektowany, aby zapewnić deweloperom języka C++ dostęp do nowoczesnego interfejsu API systemu Windows przy użyciu pierwszej klasy.C++/WinRT is designed to provide C++ developers with first-class access to the modern Windows API. Aby uzyskać więcej informacji, zobacz C++/WinRT.For more information, see C++/WinRT.

Począwszy od kompilacji 17025 Windows SDK w wersji zapoznawczej, w Windows SDK znajduje się/WinRT C++.Starting in build 17025 of the Windows SDK Insider Preview, C++/WinRT is included in the Windows SDK. Aby uzyskać więcej informacji, zobacz C++/WinRT jest teraz dołączany do Windows SDK.For more information, see C++/WinRT is now included the Windows SDK.

Zestaw narzędzi platformy Clang/C2The Clang/C2 platform toolset

Zestaw narzędzi Clang/C2 dostarczany z programem Visual Studio 2017 obsługuje teraz /bigobj przełącznik, który jest kluczowy dla kompilowania dużych projektów.The Clang/C2 toolset that ships with Visual Studio 2017 now supports the /bigobj switch, which is crucial for building large projects. Zawiera również kilka ważnych poprawek, zarówno w frontonie, jak i zapleczu kompilatora.It also includes several important bug fixes, both in the compiler front-end and back-end.

Analiza kodu w języku C++C++ code analysis

Podstawowe narzędzia do sprawdzania kodu C++ wymuszające stosowanie podstawowych wytycznych dotyczących języka C++ są obecnie dystrybuowane z programem Visual Studio.The C++ Core Checkers for enforcing the C++ Core Guidelines are now distributed with Visual Studio. Włącz kontrolki na stronie rozszerzenia analizy kodu na stronach właściwości projektu.Enable the checkers in the Code Analysis Extensions page in the project's property pages. Rozszerzenia są następnie dołączane podczas uruchamiania analizy kodu.The extensions are then included when you run code analysis. Aby uzyskać więcej informacji, zobacz using the podstawowe wytyczne dotyczące języka C++ checks.For more information, see Using the C++ Core Guidelines checkers.

Zrzut ekranu przedstawiający okno dialogowe strony właściwości, w którym są wyświetlane właściwości konfiguracji > analizy kodu > ogólne wybrane i wiele testów podstawowych wymienionych w sekcji Uruchom ten zestaw reguł.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.

Visual Studio 2017, wersja 15.3Visual Studio 2017 version 15.3
  • Dodano obsługę reguł związanych z zarządzaniem zasobami.Support added for rules related to resource management.
Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5
  • Nowe podstawowe wytyczne dotyczące języka C++ sprawdzają poprawność wskaźnika inteligentnego, prawidłowe użycie inicjatorów globalnych i Oflagowanie użycia konstrukcji, takich jak goto i złe rzutowanie.New C++ Core Guidelines checks cover smart pointer correctness, correct use of global initializers, and flagging uses of constructs like goto and bad casts.

  • Niektóre numery ostrzeżeń, które można znaleźć w wersji 15.3, nie są już dostępne w wersji 15.5.Some warning numbers you may find in 15.3 are no longer available in 15.5. Ostrzeżenia te zostały zastąpione bardziej szczegółowymi operacjami sprawdzania.These warnings were replaced with more specific checks.

Visual Studio 2017, wersja 15.6Visual Studio 2017 version 15.6
Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7

Testy jednostkowe w programie Visual Studio 2017Unit testing in Visual Studio 2017

Visual Studio 2017, wersja 15.5Visual Studio 2017 version 15.5

Google Test Adapter i zwiększanie wydajności. Adapter testowy jest teraz dostępny jako składniki programowania aplikacji klasycznych w języku C++ .Google Test Adapter and Boost.Test Adapter are now available as components of the Desktop Development with C++ workload. Są one zintegrowane z Eksploratorem testów.They're integrated with Test Explorer. Obsługa narzędzia ctest jest dodawana do projektów CMake (przy użyciu otwartego folderu), ale pełna integracja z Eksploratorem testów nie jest jeszcze dostępna.CTest support is added for CMake projects (using Open Folder), although full integration with Test Explorer isn't available yet. Aby uzyskać więcej informacji, zobacz pisanie testów jednostkowych dla C/C++.For more information, see Writing unit tests for C/C++.

Visual Studio 2017, wersja 15.6Visual Studio 2017 version 15.6
  • Dodano obsługę dla Boost.Test obsługi biblioteki dynamicznej.Support added for Boost.Test dynamic library support.
  • Boost.TestSzablon elementu jest teraz dostępny w środowisku IDE.A Boost.Test item template is now available in the IDE.

Aby uzyskać więcej informacji, zobacz Boost.Test testowanie jednostek: obsługa biblioteki dynamicznej i szablon nowego elementu.For more information, see Boost.Test Unit Testing: Dynamic Library support and New Item Template.

Visual Studio 2017 w wersji 15.7Visual Studio 2017 version 15.7

Dodano obsługę CodeLens dla projektów testów jednostkowych w języku C++.CodeLens support added for C++ unit test projects. Aby uzyskać więcej informacji, zobacz temat ogłaszanie CodeLens dla testów jednostkowych w języku C++.For more information, see Announcing CodeLens for C++ Unit Testing.

Diagnostyka grafiki programu Visual StudioVisual Studio graphics diagnostics

Narzędzia Diagnostyka grafiki programu Visual Studio: można ich używać do rejestrowania i analizowania problemów z renderowaniem i wydajnością w aplikacjach Direct3D.Visual Studio Graphics Diagnostics tools: You can use them to record and analyze rendering and performance problems in Direct3D apps. Należy używać ich w aplikacjach, które są uruchamiane lokalnie na komputerze z systemem Windows, w emulatorze urządzenia z systemem Windows lub na komputerze zdalnym lub urządzeniu.Use them on apps that run locally on your Windows PC, in a Windows device emulator, or on a remote PC or device.

  • Dane wejściowe & danych wyjściowych dla programów do cieniowania wierzchołków i geometrii: Możliwość wyświetlania danych wejściowych i wyjściowych programów do cieniowania wierzchołków i cieniowania geometrycznego była jedną z najbardziej żądanych funkcji.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. Jest ona teraz obsługiwana w narzędziach.It's now supported in the tools. Wybierz etap programu VS lub GS w widoku etapy potoku, aby rozpocząć inspekcję danych wejściowych i wyjściowych w poniższej tabeli.Select the VS or GS stage in the Pipeline Stages view to start inspecting its input and output in the table below.

    Dane wejściowe/wyjściowe dla programów do cieniowania

  • Wyszukiwanie i filtrowanie w tabeli obiektów: Zapewnia szybki i łatwy sposób znajdowania szukanych zasobów.Search and filter in the object table: Provides a quick and easy way to find the resources you're looking for.

    Zrzut ekranu przedstawiający sekcję tabeli obiektów z listą rozwijaną typ i wyszukiwanym polem tekstowym.

  • Historia zasobów: Ten nowy widok zapewnia ulepszony sposób wyświetlania całej historii modyfikacji zasobu, ponieważ był używany podczas renderowania przechwyconej ramki.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. Aby wywoływać historię dla dowolnego zasobu, kliknij ikonę zegara obok dowolnego hiperłącza zasobu.To invoke the history for any resource, click the clock icon next to any resource hyperlink.

    Historia zasobów

    Zostanie wyświetlone nowe okno narzędzia historia zasobów wypełnione historią zmian zasobu.It displays the new Resource History tool window, populated with the change history of the resource.

    Zmiana historii zasobów

    Można przechwytywać ramki z włączonym pełnym przechwytywaniem stosu wywołań.You can capture frames with full call stack capturing enabled. Pozwala to szybko ustalić kontekst każdego zdarzenia zmiany i sprawdzić je w projekcie programu Visual Studio.That lets you quickly deduce the context of each change event, and inspect it within your Visual Studio project. Ustaw opcję Przechwyć pełną stos w oknie dialogowym opcje > narzędzia Visual Studio w obszarze Diagnostyka grafiki.Set the full stack capture option in the Visual Studio Tools > Options dialog under Graphics Diagnostics.

  • Statystyka interfejsu API: Wyświetl podsumowanie wysokiego poziomu użycia interfejsu API w ramce.API Statistics: View a high-level summary of API usage in your frame. Jest to przydatne w przypadku odnajdywania wywołań, które mogą nie być w ogóle wykonywane, lub wywoływać zbyt często.It's handy for discovering calls you may not realize you're making at all, or calls you're making too often. To okno jest dostępne za pośrednictwem widoku > statystyk interfejsu API w programie Analizator grafiki programu Visual Studio.This window is available via View > API Statistics in Visual Studio Graphics Analyzer.

    Statystyka interfejsu API

  • Statystyka pamięci: Wyświetl ilość pamięci przydzielonej przez sterownik dla zasobów tworzonych w ramce.Memory Statistics: View how much memory the driver allocates for the resources you create in the frame. To okno jest dostępne za pośrednictwem widoku > statystyk pamięci w Analizator grafiki programu Visual Studio.This window is available via View > Memory Statistics in Visual Studio Graphics Analyzer. Aby skopiować dane do pliku CSV w celu wyświetlenia w arkuszu kalkulacyjnym, kliknij prawym przyciskiem myszy i wybierz polecenie Kopiuj wszystko.To copy data to a CSV file for viewing in a spreadsheet, right-click and choose Copy All.

    Statystyki pamięci

  • Sprawdzanie poprawności ramki: Nowa lista błędów i ostrzeżeń umożliwia łatwe nawigowanie po liście zdarzeń na podstawie potencjalnych problemów wykrytych przez warstwę debugowania 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. Kliknij pozycję wyświetl > sprawdzanie poprawności ramki w Analizator grafiki programu Visual Studio, aby otworzyć okno.Click View > Frame Validation in Visual Studio Graphics Analyzer to open the window. Następnie kliknij pozycję Uruchom weryfikację , aby rozpocząć analizę.Then click Run Validation to start the analysis. Ukończenie tej operacji może potrwać kilka minut, w zależności od złożoności ramki.It can take several minutes to complete, depending on the frame's complexity.

    Sprawdzanie poprawności ramki

  • Analiza klatek dla D3D12: Analiza klatek umożliwia analizowanie wydajności wywołań rysowania przy użyciu ukierunkowanych eksperymentów "co w przypadku".Frame Analysis for D3D12: Use Frame Analysis to analyze draw-call performance with directed "what-if" experiments. Przejdź do karty analiza klatek i Uruchom analizę, aby wyświetlić raport.Switch to the Frame Analysis tab and run analysis to view the report. Aby uzyskać więcej informacji, Obejrzyj GoingNative 25: film wideo z programu Visual analiza klatek grafiki Studio .For more details, watch the GoingNative 25: Visual Studio Graphics Frame Analysis video.

    Analiza klatek

  • Ulepszenia użycia procesora GPU: Otwarte śledzenia można wykonać za pośrednictwem profilera użycia procesora GPU programu Visual Studio z widokiem procesora GPU lub narzędziem Windows Performance Analyzer (WPA) w celu uzyskania bardziej szczegółowej analizy.GPU Usage Improvements: Open traces can be taken via the Visual Studio GPU Usage profiler with either GPU View or the Windows Performance Analyzer (WPA) tool for more detailed analysis. Jeśli masz zainstalowany zestaw narzędzi wydajności systemu Windows, istnieją dwa hiperlinki: jeden dla WPA i inny dla widoku GPU, w prawym dolnym rogu omówienia sesji.If you have the Windows Performance Toolkit installed, there are two hyperlinks: one for WPA and another for GPU View, at the bottom right of the session overview.

    Użycie procesora GPU

    Ślady otwierane w widoku GPU za pośrednictwem tego linku obsługują zsynchronizowane i graficzne wyświetlanie osi czasu oraz powiększanie i panoramowanie.Traces you open in GPU View via this link support synchronized VS and GPU View timeline zooming and panning. Pole wyboru w programie VS kontroluje, czy synchronizacja jest włączona, czy nie.A checkbox in VS controls whether synchronization is enabled or not.

    Widok procesora GPU

Aby zapoznać się z pełną listą nowości w programie Visual Studio 2015 Update 3, zobacz Visual C++ co nowego 2003 do 2015.For the complete list of what's new through Visual Studio 2015 Update 3, see Visual C++ What's New 2003 through 2015.

Aby uzyskać więcej informacji na temat nowości we wszystkich wersjach programu Visual Studio 2015, zobacz informacje o wersji.For more information on what's new in all of Visual Studio 2015, see the release notes. Są one połączone z historią informacji o wersji programu Visual Studio 2015.They're linked from Visual Studio 2015 Release Notes History.

Aby uzyskać informacje na temat Nowości w języku C++ w programie Visual Studio 2019, zobacz co nowego w języku c++ w programie Visual studio 2019.For information on what's new for C++ in Visual Studio 2019, see What's new for C++ in Visual Studio 2019.

Aby uzyskać informacje na temat Nowości w języku C++ w programie Visual Studio 2017, zobacz co nowego w języku c++ w programie Visual studio 2017.For information on what's new for C++ in Visual Studio 2017, see What's new for C++ in Visual Studio 2017.