Co nowego w języku C++ w programie Visual Studio 2017
Program Visual Studio 2017 oferuje wiele aktualizacji i poprawek środowiska C++. Rozwiązaliśmy ponad 250 usterek i zgłaszaliśmy problemy w kompilatorze i narzędziach. Wiele z nich zostało przesłanych przez klientów za pośrednictwem opcji Zgłoś problem i Podaj sugestię w obszarze Wyślij opinię. Dziękujemy za zgłaszanie usterek!
Aby uzyskać więcej informacji na temat nowości we wszystkich programach Visual Studio, zobacz Co nowego w programie 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 2019. Aby uzyskać informacje na temat nowości w języku C++ w programie Visual Studio 2015 i starszych wersjach, zobacz Visual C++ What's New 2003–2015 (Co nowego w programie Visual C++ do 2015). Aby uzyskać informacje o nowościach w dokumentacji języka C++, zobacz Microsoft C++ docs: What's new (Dokumentacja języka Microsoft C++: co nowego).
Kompilator języka C++ programu Visual Studio 2017
Ulepszenia zgodności języka C++
Zaktualizowaliśmy kompilator języka C++ i bibliotekę standardową w tej wersji z rozszerzoną obsługą funkcji C++11 i C++14. Obejmuje również wstępną obsługę niektórych funkcji, które powinny znajdować się w standardzie C++17. Aby uzyskać szczegółowe informacje, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio 2017.
Visual Studio 2017, wersja 15.5
Kompilator obsługuje około 75% funkcji, które są nowe w języku C++17, w tym powiązania strukturalne, constexpr
lambdy, zmienne wbudowane, if constexpr
wyrażenia złożone i dodawanie noexcept
do systemu typów. Te funkcje są dostępne w /std:c++17
ramach opcji . Aby uzyskać więcej informacji, zobacz C++ Conformance Improvements in Visual Studio 2017 (Ulepszenia zgodności języka C++ w programie Visual Studio 2017)
Visual Studio 2017 w wersji 15.7
Zestaw narzędzi kompilatora MSVC w programie Visual Studio w wersji 15.7 jest teraz zgodny ze standardem C++. Aby uzyskać więcej informacji, zobacz Ogłoszenie: MSVC jest zgodne ze standardem C++ i zgodnością języka Microsoft C/C++.
Visual Studio 2017 w wersji 15.8
Przełącznik /experimental:preprocessor
kompilatora umożliwia nowy eksperymentalny preprocesor MSVC, który ostatecznie będzie zgodny ze wszystkimi odpowiednimi standardami C i C++. Aby uzyskać więcej informacji, zobacz MSVC new preprocessor overview (Omówienie nowego preprocesora MSVC).
Nowe opcje kompilatora
/permissive-
: Włącz wszystkie ścisłe opcje kompilatora zgodności ze standardami i wyłącz większość rozszerzeń kompilatora specyficznych dla firmy Microsoft (ale nie__declspec(dllimport)
, na przykład). Ta opcja jest domyślnie włączona w programie Visual Studio 2017 w wersji 15.5. Tryb/permissive-
zgodności obejmuje obsługę wyszukiwania nazw dwufazowych. Aby uzyskać więcej informacji, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio./diagnostics
: włącza wyświetlanie błędu diagnostycznego lub lokalizacji ostrzeżenia na trzy różne sposoby: tylko numer wiersza, numer wiersza i kolumna albo numer wiersza i kolumna z daszkiem pod wierszem kodu o obrazie./debug:fastlink
: Włącz do 30% szybsze czasy łączenia przyrostowego (w porównaniu z programem Visual Studio 2015), nie kopiując wszystkich informacji debugowania do pliku PDB. Plik PDB wskazuje zamiast tego informacje debugowania dla plików obiektów i bibliotek używanych do utworzenia pliku wykonywalnego. Zobacz Szybszy cykl kompilacji języka C++ w programie VS "15" z instrukcjami/Debug:fastlink
i Zalecenia, aby przyspieszyć kompilacje języka C++ w programie Visual Studio.Program Visual Studio 2017 umożliwia korzystanie z programu z
/await
programem/sdl
. Usunęliśmy/RTC
ograniczenie coroutines.
Visual Studio 2017, wersja 15.3
/std:c++14
i/std:c++latest
: Te opcje kompilatora umożliwiają wybranie określonych wersji języka programowania ISO C++ w projekcie. Większość nowych funkcji standardowych wersji roboczych jest chroniona/std:c++latest
przez tę opcję./std:c++17
włącza zestaw funkcji języka C++17 implementowanych przez kompilator. Ta opcja wyłącza obsługę kompilatora i standardowej biblioteki dla funkcji po wersji C++17: te, które zostały zmienione lub nowe w nowszych wersjach roboczej wersji roboczej oraz aktualizacje wad standardu C++. Aby włączyć te funkcje, użyj polecenia/std:c++latest
.
Codegen, zabezpieczenia, diagnostyka i przechowywanie wersji
W tej wersji wprowadzono kilka ulepszeń optymalizacji, generowania kodu, przechowywania wersji zestawu narzędzi i diagnostyki. Do istotnych ulepszeń należą:
- Ulepszone generowanie kodu pętli: obsługa automatycznej wektoryzacji dzielenia stałych liczb całkowitych, lepsza identyfikacja wzorców funkcji memset.
- Ulepszone zabezpieczenia kodu: Ulepszona emisja diagnostyki kompilatora przepełnienia buforu, a
/guard:cf
teraz chroni instrukcje switch generujące tabele skoków. - Przechowywanie wersji: wartość wbudowanego makra preprocesora _MSC_VER jest teraz monotonicznie aktualizowana przy każdej aktualizacji zestawu narzędzi Visual C++. Aby uzyskać więcej informacji, zobacz Visual C++ Compiler Version (Wersja kompilatora Visual C++).
- Nowy układ zestawu narzędzi: kompilator i powiązane narzędzia kompilacji mają nową strukturę lokalizacji i katalogów na komputerze deweloperskim. Nowy układ umożliwia równoległe instalacje wielu wersji kompilatora. Aby uzyskać więcej informacji, zobacz Kompilator Tools Layout in Visual Studio 2017 (Układ narzędzi kompilatora w programie Visual Studio 2017).
- Ulepszona diagnostyka: w oknie danych wyjściowych jest teraz wyświetlana kolumna, w której występuje błąd. Aby uzyskać więcej informacji, zobacz Ulepszenia diagnostyki kompilatora języka C++ w programie VS "15" (wersja zapoznawcza 5).
- W przypadku korzystania z kohroutines eksperymentalna wydajność słowa kluczowego (dostępna w
/await
ramach opcji) została usunięta. Kod powinien zostać zaktualizowany, aby zamiast tego był używanyco_yield
. Aby uzyskać więcej informacji, zobaczyield
słowo kluczowe, które ma zostać wco_yield
programie VS 2017.
Visual Studio 2017, wersja 15.3
Ulepszenia diagnostyki w kompilatorze. Aby uzyskać więcej informacji, zobacz Ulepszenia diagnostyczne w programie Visual Studio 2017 15.3.0.
Visual Studio 2017, wersja 15.5
Wydajność środowiska uruchomieniowego języka Visual C++ nadal poprawia się dzięki lepszej jakości wygenerowanego kodu. Teraz możesz po prostu ponownie skompilować kod, a aplikacja działa szybciej. Niektóre optymalizacje kompilatora są zupełnie nowe, takie jak wektoryzacja warunkowych magazynów skalarnych, połączenie wywołań sin(x)
i cos(x)
w nowe sincos(x)
, oraz eliminacja nadmiarowych instrukcji z optymalizatora SSA. Inne optymalizacje kompilatora to ulepszenia istniejących funkcji, takie jak: heurystyka wektoryzatora dla wyrażeń warunkowych, lepsza optymalizacja pętli i liczba zmiennoprzecinkowa minimalna/maksymalna liczba kodów. Konsolidator ma nową i szybszą /OPT:ICF
implementację, co może spowodować przyspieszenie do 9% czasu łączenia i istnieją inne poprawki wydajności w łączeniu przyrostowym. Aby uzyskać więcej informacji, zobacz /OPT (Optymalizacje) i /INCREMENTAL (Połącz przyrostowo).
Kompilator języka Microsoft C++ obsługuje oprogramowanie AVX-512 firmy Intel. Zawiera on instrukcje dotyczące długości wektora, które przenoszą nowe funkcje w rejestrach AVX-512 do 128-bitowych i 256-bitowych.
Opcja /Zc:noexceptTypes-
może służyć do przywracania do wersji noexcept
C++14 podczas korzystania z trybu C++17 w ogóle. Ta opcja umożliwia zaktualizowanie kodu źródłowego w taki sposób, aby był zgodny z językiem C++17 bez konieczności ponownego zapisywania całego throw()
kodu w tym samym czasie. Aby uzyskać więcej informacji, zobacz Usuwanie specyfikacji wyjątków dynamicznych i brak wyjątku.
Visual Studio 2017 w wersji 15.7
- Nowy przełącznik kompilatora /Qspectre , aby pomóc zminimalizować ryzyko ataków kanału bocznego wykonywania spekulatywnego. Aby uzyskać więcej informacji, zobacz Spectre mitigations in MSVC (Środki zaradcze spectre w MSVC).
- Nowe ostrzeżenie diagnostyczne dotyczące ograniczania ryzyka spectre. Aby uzyskać więcej informacji, zobacz Spectre diagnostic in Visual Studio 2017 Version 15.7 Preview 4 (Diagnostyka spectre w programie Visual Studio 2017 w wersji 15.7 (wersja zapoznawcza 4).
- Nowa wartość /Zc,
/Zc:__cplusplus
, umożliwia poprawne raportowanie standardowej obsługi języka C++. Na przykład gdy przełącznik jest ustawiony, a kompilator jest w/std:c++17
trybie, wartość rozwija się na201703L
. Aby uzyskać więcej informacji, zobacz MSVC teraz poprawnie zgłasza __cplusplus.
Standardowa biblioteka C++
Ulepszenia poprawności
Visual Studio 2017 RTM (wersja 15.0)
- Drobne
basic_string
_ITERATOR_DEBUG_LEVEL != 0
ulepszenia diagnostyki. Gdy sprawdzanie IDL zostanie potknięte w maszynach ciągowych, teraz zgłasza określone zachowanie, które spowodowało podróż. Na przykład zamiast "iterator ciągów nie można wyłuszczyć" otrzymujesz "nie można wyłuszczyć iteratora ciągów, ponieważ jest poza zakresem (np. iterator końca)". std::promise
Naprawiono operator przypisania przenoszenia, który wcześniej mógł spowodować zablokowanie kodu na zawsze.- Naprawiono błędy kompilatora z niejawną konwersją
atomic<T*>
naT*
. pointer_traits<Ptr>
teraz poprawnie wykrywa .Ptr::rebind<U>
- Naprawiono brak
const
kwalifikatoramove_iterator
w operatorze odejmowania. - Naprawiono dyskretne nieprawidłowe generowanie kodu dla alokatorów zdefiniowanych przez użytkownika stanowych żądań
propagate_on_container_copy_assignment
ipropagate_on_container_move_assignment
. atomic<T>
teraz toleruje przeciążoneoperator&()
.- Nieco ulepszona diagnostyka kompilatora pod kątem nieprawidłowych
bind()
wywołań.
W programie Visual Studio 2017 RTM wprowadzono więcej standardowych ulepszeń biblioteki. Aby uzyskać pełną listę, zobacz wpis w blogu zespołu języka C++ Standardowe poprawki biblioteki w programie VS 2017 RTM.
Visual Studio 2017, wersja 15.3
- Standardowe kontenery biblioteki mają teraz zaciśnięte
max_size()
wartości ,numeric_limits<difference_type>::max()
a niemax()
.size_type
Ta zmiana gwarantuje, że wynikdistance()
iteratorów z tego kontenera jest reprezentowany w zwracanym typiedistance()
. - Usunięto brakującą specjalizację
auto_ptr<void>
. - Algorytmy
for_each_n()
,generate_n()
isearch_n()
wcześniej nie można skompilować, jeśli argument długości nie był typem całkowitym. Teraz próbują przekonwertować długości nieintegralne na iteratory .difference_type
normal_distribution<float>
nie emituje już ostrzeżeń wewnątrz standardowej biblioteki o zawężaniu z podwójnego do zmiennoprzecinkowego.- Naprawiono niektóre
basic_string
operacje używanenpos
zamiast podczas sprawdzania maksymalnegomax_size()
przepełnienia rozmiaru. condition_variable::wait_for(lock, relative_time, predicate)
będzie czekać na cały względny czas, jeśli nie było fałszywe przebudzenie. Teraz czeka tylko jeden interwał czasu względnego.future::get()
teraz unieważnia elementfuture
, zgodnie z wymaganiami standardowymi.iterator_traits<void *>
używany jako twardy błąd, ponieważ próbował utworzyćvoid&
; teraz staje się pustą strukturą umożliwiającą użycieiterator_traits
w warunkach SFINAE "is iterator".- Niektóre ostrzeżenia zgłoszone przez język Clang
-Wsystem-headers
zostały naprawione. - Naprawiono również "specyfikacja wyjątku w deklaracji nie jest zgodna z poprzednią deklaracją" zgłoszoną przez Clang
-Wmicrosoft-exception-spec
. - Naprawiono również ostrzeżenia dotyczące porządkowania list mem-initializer zgłaszane przez język Clang i C1XX.
- Kontenery nieurządkowane nie zamieniły funkcji skrótu ani predykatów, gdy same kontenery zostały zamienione. Teraz to robią.
- Wiele operacji zamiany kontenerów jest teraz oznaczonych
noexcept
(ponieważ nasza biblioteka standardowa nigdy nie zamierza zgłaszać wyjątku podczas wykrywaniapropagate_on_container_swap
niezdefiniowanego warunku zachowania niezdefiniowanego alokatora). - Wiele
vector<bool>
operacji jest teraz oznaczonych jakonoexcept
. - Biblioteka standardowa wymusza teraz dopasowywanie alokatora
value_type
(w trybie C++17) z wykluciem ucieczki rezygnacji. - Usunięto niektóre warunki, w których samodzielne wstawianie zakresu do
basic_string
elementu powodowało przecięcie zawartości ciągów. (Uwaga: samozakresowe wstawianie do wektorów jest nadal zabronione przez standard). basic_string::shrink_to_fit()
nie ma już wpływu na alokatorapropagate_on_container_swap
.std::decay
Teraz obsługuje obrzydliwujące typy funkcji, czyli typy funkcji, które są kwalifikowane cv, ref-qualified lub oba typy.- Zmieniono dyrektywy dołączania, aby używać odpowiedniej poufności wielkości liter i ukośników, zwiększając przenośność.
- Naprawiono ostrzeżenie C4061 "moduł wyliczający "enumerator" w przełączniku wyliczenia "wyliczenie" nie jest jawnie obsługiwane przez etykietę wielkości liter". To ostrzeżenie jest domyślnie wyłączone i zostało naprawione jako wyjątek od ogólnych zasad biblioteki standardowej dla ostrzeżeń. (Standardowa biblioteka jest
/W4
czysta, ale nie próbuje być/Wall
czysta. Wiele ostrzeżeń poza domyślnymi jest niezwykle hałaśliwych i nie jest przeznaczonych do regularnego użycia. - Ulepszone
std::list
kontrole debugowania. Lista iteratorów teraz sprawdzaoperator->()
, alist::unique()
teraz oznacza iteratory jako unieważnione. - Naprawiono metaprogramowanie przy użyciu alokatora w programie
tuple
.
Visual Studio 2017, wersja 15.5
std::partition
teraz wywołuje predykatN
razy zamiast razy, zgodnie zN + 1
wymaganiami standardu.- Próby uniknięcia magicznych statycznych w wersji 15.3 są naprawiane w wersji 15.5.
std::atomic<T>
nie wymagaT
już konstrukcji domyślnej.- Algorytmy sterty, które zajmują czas logarytmicznych zachowują się inaczej, gdy jest włączone debugowanie iteratora. Nie wykonują już liniowej asercji czasowej, że dane wejściowe są w rzeczywistości stertą.
__declspec(allocator)
Funkcja jest teraz chroniona tylko dla języka C1XX, aby zapobiec ostrzeżeniom języka Clang, co nie rozumie tego declspec.basic_string::npos
jest teraz dostępny jako stała czasu kompilacji.std::allocator
W trybie C++17 teraz prawidłowo obsługuje alokację typów wyrównanych, czyli typów, których wyrównanie jest większe niżmax_align_t
, chyba że jest wyłączone przez/Zc:alignedNew-
. Na przykład wektory obiektów z wyrównaniem 16 bajtów lub 32 bajtów są teraz prawidłowo wyrównane dla instrukcji SSE i AVX.
Ulepszenia zgodności
- Dodaliśmy <wszystkie>, <string_view>,
apply()
,make_from_tuple()
. - Dodano <opcjonalne>, <warianty>,
shared_ptr::weak_type
i <cstdalign>. - Włączono język C++14
constexpr
w systemachmin(initializer_list)
,max(initializer_list)
iminmax(initializer_list)
imin_element()
,max_element()
iminmax_element()
.
Aby uzyskać więcej informacji, zobacz Zgodność języka Microsoft C/C++.
Visual Studio 2017, wersja 15.3
- Zaimplementowano kilka innych funkcji języka C++17. Aby uzyskać więcej informacji, zobacz Tabela zgodności języka Microsoft C++.
- Zaimplementowano P0602R0 "wariant i opcjonalny powinny propagować trywialię kopiowania/przenoszenia".
- Biblioteka standardowa obecnie oficjalnie tolerowa dynamiczne RTTI jest wyłączona za pośrednictwem /GR- opcji. Zarówno,
dynamic_pointer_cast()
jak irethrow_if_nested()
z założenia wymagajądynamic_cast
, więc biblioteka standardowa oznacza je teraz jako=delete
w obszarze/GR-
. - Nawet w przypadku wyłączenia dynamicznego języka RTTI za pośrednictwem
/GR-
polecenia "statyczny RTTI" w postacitypeid(SomeType)
elementu jest nadal dostępny i obsługuje kilka standardowych składników biblioteki. Biblioteka standardowa obsługuje teraz również wyłączenie tej funkcji za pośrednictwem polecenia/D_HAS_STATIC_RTTI=0
. Ta flaga wyłączastd::any
również funkcjestd::function
elementówtarget()
członkowskich itarget_type()
i funkcjiget_deleter()
elementów członkowskich oraz funkcji elementu członkowskiego znajomego istd::shared_ptr
std::weak_ptr
. - Biblioteka standardowa używa teraz bezwarunkowo języka C++14
constexpr
zamiast warunkowo zdefiniowanych makr. - Biblioteka standardowa używa teraz szablonów aliasów wewnętrznie.
- Standardowa biblioteka używa
nullptr
teraz wewnętrznie, a nienullptr_t{}
. (Wewnętrzne użycie wartości NULL zostało wyeliminowane. Wewnętrzne użycie wartości 0 jako null jest stopniowo czyszczone). - Standardowa biblioteka używa
std::move()
teraz wewnętrznie, zamiast stylistycznie błędnie używaćstd::forward()
. - Zmieniono
static_assert(false, "message")
na#error message
. Ta zmiana poprawia diagnostykę kompilatora, ponieważ#error
natychmiast zatrzymuje kompilację. - Biblioteka standardowa nie oznacza już funkcji jako
__declspec(dllimport)
. Nowoczesna technologia konsolidatora nie wymaga już tej technologii. - Wyodrębniono argumenty SFINAE do domyślnych argumentów szablonu, które zmniejszyły bałagan w porównaniu z typami zwracanych i typami argumentów funkcji.
- Testy debugowania w <losowych> teraz używają zwykłych maszyn biblioteki standardowej zamiast funkcji
_Rng_abort()
wewnętrznej , która została wywołanafputs()
dostderr
. Implementacja tej funkcji jest zachowywana pod kątem zgodności binarnej. Usuniemy go w następnej niezgodnej wersji binarnej standardowej biblioteki.
Visual Studio 2017, wersja 15.5
- Dodano kilka standardowych funkcji biblioteki, przestarzałych lub usuniętych zgodnie ze standardem C++17. Aby uzyskać więcej informacji, zobacz Ulepszenia zgodności języka C++ w programie Visual Studio.
- Eksperymentalna obsługa następujących algorytmów równoległych:
all_of
any_of
for_each
for_each_n
none_of
reduce
replace
replace_if
sort
- Podpisy dla następujących algorytmów równoległych są dodawane, ale nie są w tej chwili zrównane. Profilowanie nie wykazało korzyści w algorytmach równoległych, które przenoszą tylko elementy permute:
copy
copy_n
fill
fill_n
move
reverse
reverse_copy
rotate
rotate_copy
swap_ranges
Visual Studio 2017, wersja 15.6
<memory_resource>
- Podstawy biblioteki w wersji 1
polymorphic_allocator
Usuwanie przypisania- Ulepszanie odliczenia argumentu szablonu klasy
Visual Studio 2017 w wersji 15.7
- Obsługa algorytmów równoległych nie jest już eksperymentalna
- Nowa implementacja
<filesystem>
- Konwersje ciągów podstawowych (częściowe)
std::launder()
std::byte
hypot(x,y,z)
- Unikanie niepotrzebnego rozpadu
- Matematyczne funkcje specjalne
constexpr char_traits
- Przewodniki dotyczące potrąceń dla standardowej biblioteki
Aby uzyskać więcej informacji, zobacz Zgodność języka Microsoft C/C++.
Poprawki wydajności i przepływności
- Wykonane
basic_string::find(char)
przeciążenia są wywoływanetraits::find
tylko raz. Wcześniej został zaimplementowany jako ogólny ciąg wyszukiwania ciągu o długości 1. basic_string::operator==
Teraz sprawdza rozmiar ciągu przed porównaniem zawartości ciągów.- Usunięto sprzężenie sterowania w elemecie
basic_string
, co było trudne do przeanalizowania przez optymalizator kompilatora. W przypadku wszystkich krótkich ciągów wywoływaniereserve
nadal ma koszt niezerowy, aby nic nie robić. std::vector
został poprawiony pod kątem poprawności i wydajności: aliasy podczas operacji wstawiania i miejsca są teraz poprawnie obsługiwane zgodnie z wymaganiami standardu, gwarancja silnego wyjątku jest teraz zapewniana w razie potrzeby przez standard za pośrednictwemmove_if_noexcept()
i innej logiki, a wstawianie i miejsce wykonuje mniej operacji elementów.- Standardowa biblioteka języka C++ pozwala teraz uniknąć wyłusania wskaźników o wartości null.
- Zwiększona
weak_ptr::lock()
wydajność. - Aby zwiększyć przepływność kompilatora, nagłówki standardowej biblioteki języka C++ unikają teraz dołączania deklaracji do niepotrzebnych funkcji wewnętrznych kompilatora.
- Zwiększono wydajność
std::string
istd::wstring
przenieś konstruktory o ponad trzy razy.
Visual Studio 2017, wersja 15.3
- Współpracowaliśmy nad interakcjami z
noexcept
programem , które uniemożliwiły wprowadzeniestd::atomic
implementacji do funkcji korzystających z obsługi wyjątków strukturalnych (SEH). - Zmieniono funkcję wewnętrzną
_Deallocate()
biblioteki standardowej, aby zoptymalizować ją na mniejszy kod, co pozwala na dodanie ich do większej liczby miejsc. - Zmieniono
std::try_lock()
polecenie , aby używać rozszerzenia pakietu zamiast rekursji. - Ulepszono
std::lock()
algorytm unikania zakleszczenia, aby używaćlock()
operacji zamiast obracać się natry_lock()
wszystkich blokadach. - Włączono optymalizację nazwanej wartości zwracanej w programie
system_category::message()
. conjunction
adisjunction
teraz tworzyN + 1
wystąpienie typów zamiast2N + 2
typów.std::function
nie tworzy już wystąpienia maszyn alokatora dla każdego wywołania wymazanego typu, zwiększając przepływność i zmniejszając .obj rozmiar w programach, które przekazują wiele odrębnych lambd dostd::function
.allocator_traits<std::allocator>
Zawiera operacje wbudowanestd::allocator
ręcznie, zmniejszając rozmiar kodu w kodzie, który wchodzi w interakcjęstd::allocator
tylko za pośrednictwemallocator_traits
(czyli w większości kodu).- Minimalny interfejs alokatora języka C++11 jest teraz obsługiwany przez standardową bibliotekę wywołującą
allocator_traits
bezpośrednio, zamiast opakowującego alokator w klasie_Wrap_alloc
wewnętrznej . Ta zmiana zmniejsza rozmiar kodu generowany na potrzeby obsługi alokatora, poprawia zdolność optymalizatora do wnioskowania o standardowych kontenerach biblioteki w niektórych przypadkach i zapewnia lepsze środowisko debugowania (jak teraz widzisz typ alokatora, a nie_Wrap_alloc<your_allocator_type>
w debugerze). - Usunięto metaprogramowanie dla dostosowanego
allocator::reference
elementu , które alokatory nie mogą być dostosowywane. (Alokatory mogą używać fantazyjne wskaźniki, ale nie fantazyjne odwołania). - Fronton kompilatora został nauczony odpakowania iteratorów debugowania w pętli opartych na zakresie, co poprawia wydajność kompilacji debugowania.
- Wewnętrzna
basic_string
ścieżka zmniejszania elementushrink_to_fit()
ireserve()
nie znajduje się już w ścieżce operacji przydziału, zmniejszając rozmiar kodu dla wszystkich zmutujących elementów członkowskich. - Wewnętrzna
basic_string
ścieżka wzrostu nie znajduje się już w ścieżce .shrink_to_fit()
- Operacje
basic_string
mutowania są teraz uwzględniane w nieprzydzieleniu szybkiej ścieżki i przydzielaniu funkcji powolnej ścieżki, co sprawia, że jest bardziej prawdopodobne, aby wspólny przypadek bez przydziału był dołączany do wywołujących. - Operacjemutowania
basic_string
teraz konstruują ponownie przydział w preferowanym stanie, a nie zmianę rozmiaru. Na przykład wstawianie na początku ciągu przenosi teraz zawartość po wstawieniu dokładnie raz. Jest on przenoszony w dół lub do nowo przydzielonego buforu. Nie jest już przenoszony dwa razy w przypadku przydziału rzeczywistego, najpierw do nowo przydzielonego buforu, a następnie w dół. - Operacje wywołujące bibliotekę standardową języka C w <ciągu> buforują teraz adres w
errno
celu usunięcia powtarzającej się interakcji z protokołem TLS. - Uproszczono implementację
is_pointer
. - Zakończono zmianę wyrażenia opartego na funkcjach SFINAE na
struct
ivoid_t
oparte na . - Algorytmy biblioteki standardowej unikają teraz postinkrementacji iteratorów.
- Naprawiono ostrzeżenia o obcięciu w przypadku używania 32-bitowych alokatorów w systemach 64-bitowych.
std::vector
Przypisanie przenoszenia jest teraz bardziej wydajne w przypadku nieprzydzielenia alokatora innego niż POCMA, ponownie używając buforu, gdy jest to możliwe.
Visual Studio 2017, wersja 15.5
basic_string<char16_t>
teraz angażuje się w te samememcmp
optymalizacje ,memcpy
i podobne, którebasic_string<wchar_t>
angażują się.- Ograniczenie optymalizatora, które uniemożliwiło tworzenie wbudowanych wskaźników funkcji, uwidocznione przez naszą pracę "unikanie kopiowania funkcji" w programie Visual Studio 2015 Update 3, zostało przepracowane, przywracając wydajność
lower_bound(iter, iter, function pointer)
programu . - Obciążenie związane z weryfikacją kolejności operacji iteratora w zakresie danych wejściowych do
includes
,set_symmetric_difference
set_difference
, iset_union
zostało zmniejszone przez odpisanie iteratorów przed sprawdzeniem kolejności. std::inplace_merge
teraz pomija elementy, które są już w pozycji.- Konstruowanie nie jest już konstruowane
std::random_device
, a następnie niszczystd::string
element . std::equal
istd::partition
miał przepustkę optymalizacji skoków, która zapisuje porównanie iteratora.- Po
std::reverse
przekazaniu wskaźników do trywialnie możliwego do skopiowaniaT
element jest teraz wysyłany do implementacji wektoryzowanej odręcznie. std::fill
,std::equal
istd::lexicographical_compare
zostały nauczone, jak wysyłać domemset
i igsl::byte
memcmp
std::byte
(i inne wyliczenia podobne do char i klasy wyliczenia). Ponieważstd::copy
wysyła przy użyciu metodyis_trivially_copyable
, nie wymagał żadnych zmian.- Biblioteka standardowa nie zawiera już destruktorów pustych nawiasów klamrowych, których jedynym zachowaniem było uczynienie typów niestrukturalnymi.
Inne biblioteki
Obsługa bibliotek typu open source
Vcpkg to narzędzie wiersza polecenia typu open source, które znacznie upraszcza proces uzyskiwania i kompilowania bibliotek statycznych języka C++ typu open source i bibliotek DLL W programie Visual Studio. Aby uzyskać więcej informacji, zobacz vcpkg.
Zestaw CPPRest SDK 2.9.0
Visual Studio 2017, wersja 15.5
Zestaw CPPRestSDK, międzyplatformowy internetowy interfejs API dla języka C++, został zaktualizowany do wersji 2.9.0. Aby uzyskać więcej informacji, zobacz CppRestSDK 2.9.0 jest dostępny w witrynie GitHub.
ATL
Visual Studio 2017, wersja 15.5
- Kolejny zestaw poprawek zgodności z wyszukiwaniem nazw
- Istniejące konstruktory przenoszenia i operatory przypisania przenoszenia są teraz prawidłowo oznaczone jako niewzrastające
- Nieskompresowane prawidłowe ostrzeżenie C4640 o bezpiecznym wątku init lokalnych statycznych w atlstr.h
- Bezpieczne wątkowo inicjowanie lokalnych statycznych zostało automatycznie wyłączone w zestawie narzędzi XP podczas korzystania z ATL do kompilowania biblioteki DLL. Teraz tak nie jest. Jeśli nie chcesz inicjować bezpieczne wątkowo, możesz dodać
/Zc:threadSafeInit-
ustawienia projektu.
Środowisko uruchomieniowe Visual C++
- Nowy nagłówek "cfguard.h" dla symboli funkcji Control Flow Guard.
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. Gdy konfiguracja rozwiązania jest aktywowana po raz pierwszy, jest szybsza, a wszystkie późniejsze aktywacje tej konfiguracji rozwiązania są niemal natychmiastowe.
Visual Studio 2017, wersja 15.3
- Ponownie napisano kilka kreatorów projektu i kodów w stylu okna dialogowego podpisu.
- Polecenie Dodaj klasę uruchamia teraz kreatora Dodaj klasę bezpośrednio. Wszystkie inne elementy, które wcześniej znajdowały się w tym miejscu, są teraz dostępne w obszarze Dodaj > nowy element.
- Projekty Win32 znajdują się teraz w kategorii Pulpit systemu Windows w oknie dialogowym Nowy projekt .
- Szablony konsoli systemu Windows i aplikacji klasycznej teraz tworzą projekty bez wyświetlania kreatora. W tej samej kategorii znajduje się nowy Kreator pulpitu systemu Windows, który wyświetla te same opcje co stary kreator aplikacji konsolowej Win32.
Visual Studio 2017, wersja 15.5
Kilka operacji języka C++, które używają aparatu IntelliSense do refaktoryzacji i nawigacji po kodzie, są uruchamiane znacznie szybciej. Poniższe liczby są oparte na rozwiązaniu Visual Studio Chromium z 3500 projektami:
Funkcja | Poprawa wydajności |
---|---|
Zmień nazwę | 5,3x |
Zmienianie podpisu | 4,5x |
Znajdź wszystkie odwołania | 4,7x |
Język C++ obsługuje teraz Ctrl+Click Go To Definition, dzięki czemu nawigacja myszą w definicjach jest łatwa. Wizualizator struktury z pakietu Productivity Power Tools jest teraz również domyślnie dołączony do produktu.
IntelliSense
Nowy aparat bazy danych oparty na SQLite jest teraz używany domyślnie. Nowy aparat przyspiesza operacje bazy danych, takie jak Przejdź do definicji i Znajdź wszystkie odwołania. Znacznie poprawia czas analizowania początkowego rozwiązania. Ustawienie przeniesiono do pozycji Narzędzia > Opcje > Edytor > tekstu C/C++ > Zaawansowane. (To było wcześniej pod ... Eksperymentalne C/C++ > )
Poprawiliśmy wydajność funkcji IntelliSense w projektach i plikach, które nie korzystają ze wstępnie skompilowanych nagłówków — w bieżącym pliku jest tworzony automatyczny prekompilowany nagłówek.
Do listy błędów dodaliśmy filtrowanie błędów i pomoc dotyczącą błędów funkcji IntelliSense. Kliknięcie kolumny błędów umożliwia teraz filtrowanie. Ponadto kliknięcie określonych błędów lub naciśnięcie F1 powoduje uruchomienie wyszukiwania w trybie online w poszukiwaniu komunikatu o błędzie.
Dodano możliwość filtrowania listy elementów członkowskich według rodzaju.
Dodano nową eksperymentalną funkcję IntelliSense predykcyjną, która zapewnia kontekstowe filtrowanie elementów wyświetlanych na liście elementów członkowskich. Aby uzyskać więcej informacji, zobacz Ulepszenia funkcji IntelliSense języka C++ — predykcyjna funkcja IntelliSense i filtrowanie.
Funkcja Znajdź wszystkie odwołania (Shift+F12) ułatwia łatwe poruszanie się nawet w złożonych bazach kodu. Zapewnia zaawansowane grupowanie, filtrowanie, sortowanie, wyszukiwanie w wynikach oraz (w przypadku niektórych języków) kolorowanie, dzięki czemu można uzyskać jasne informacje na temat odwołań. W przypadku języka C++nowy interfejs użytkownika zawiera informacje o tym, czy odczytamy, czy zapisujemy w zmiennej.
Funkcja IntelliSense typu Kropka-strzałka została przeniesiona z eksperymentalnego do zaawansowanego i jest teraz domyślnie włączona. Funkcje edytora Rozwiń zakresy i Rozwiń pierwszeństwo zostały przeniesione z eksperymentalnego do zaawansowanego.
Eksperymentalne funkcje refaktoryzacji Change Signature i Extract Function są teraz domyślnie dostępne.
Dodano eksperymentalną funkcję "Szybsze ładowanie projektu" dla projektów języka C++. Przy następnym otwarciu projektu języka C++ będzie ładowany szybciej, a czas, po którym zostanie załadowany znacznie szybciej.
Niektóre z tych funkcji są wspólne dla innych języków, a niektóre są specyficzne dla języka C++. Aby uzyskać więcej informacji na temat tych nowych funkcji, zobacz Ogłoszenie programu Visual Studio "15" (wersja zapoznawcza 5).
Visual Studio 2017 w wersji 15.7
- Dodano obsługę formatu ClangFormat. Aby uzyskać więcej informacji, zobacz Obsługa formatu ClangFormat w programie Visual Studio 2017.
Projekty inne niż MSBuild z otwartym folderem
Program Visual Studio 2017 wprowadza funkcję Otwórz folder . Umożliwia ona kodowanie, kompilowanie i debugowanie w folderze zawierającym kod źródłowy bez konieczności tworzenia jakichkolwiek rozwiązań lub projektów. Teraz łatwiej jest rozpocząć pracę z programem Visual Studio, nawet jeśli projekt nie jest projektem opartym na programie MSBuild. Program Open Folder zapewnia dostęp do zaawansowanych funkcji rozumienia, edytowania, kompilowania i debugowania kodu. Są to te same, które program Visual Studio już udostępnia dla projektów MSBuild. Aby uzyskać więcej informacji, zobacz Otwieranie projektów folderów dla języka C++.
- Ulepszenia obsługi polecenia Otwórz folder. Środowisko można dostosować za pomocą tych plików .json:
- CppProperties.json dostosowuje obsługę funkcji IntelliSense i przeglądania.
- Tasks.json dostosowuje kroki kompilacji.
- Launch.json dostosowuje obsługę debugowania.
Visual Studio 2017, wersja 15.3
- Ulepszona obsługa alternatywnych kompilatorów i środowisk kompilacji, takich jak MinGW i Cygwin. Aby uzyskać więcej informacji, zobacz Using MinGW and Cygwin with Visual C++ and Open Folder (Używanie biblioteki MinGW i Cygwin z językami Visual C++ i Open Folder).
- Dodano obsługę definiowania zmiennych środowiskowych specyficznych dla globalnej i konfiguracji w CppProperties.json i CMakeSettings.json. Te zmienne środowiskowe mogą być używane przez konfiguracje debugowania zdefiniowane w launch.vs.json i zadaniach w tasks.vs.json. Aby uzyskać więcej informacji, zobacz Dostosowywanie środowiska za pomocą języka Visual C++ i Otwórz folder.
- Ulepszona obsługa generatora Ninja narzędzia CMake, w tym możliwość łatwego kierowania platform 64-bitowych.
Obsługa narzędzia CMake za pośrednictwem funkcji Otwórz folder
Program Visual Studio 2017 wprowadza obsługę korzystania z projektów CMake bez konwertowania na pliki projektu MSBuild (.vcxproj). Aby uzyskać więcej informacji, zobacz Projekty CMake w programie Visual Studio. Otwieranie projektów CMake z funkcją Otwórz folder automatycznie konfiguruje środowisko do edycji, kompilowania i debugowania języka C++.
Funkcja IntelliSense języka C++ działa bez konieczności tworzenia pliku CppProperties.json w folderze głównym. Dodaliśmy nową listę rozwijaną, aby umożliwić użytkownikom łatwe przełączanie się między konfiguracjami udostępnianymi przez narzędzie CMake i pliki CppProperties.json.
Dalsza konfiguracja jest obsługiwana przy użyciu pliku CMakeSettings.json, który znajduje się w tym samym folderze co plik CMakeLists.txt.
Visual Studio 2017, wersja 15.3
- Dodano obsługę generatora CMake Ninja.
Visual Studio 2017, wersja 15.4
- Dodano obsługę importowania istniejących pamięci podręcznych CMake.
Visual Studio 2017, wersja 15.5
- Dodano obsługę narzędzia CMake 3.11, analizy kodu w projektach CMake, widoku Targets w Eksplorator rozwiązań, opcji generowania pamięci podręcznej i kompilacji pojedynczego pliku. Aby uzyskać więcej informacji, zobacz CMake Support in Visual Studio and CMake projects in Visual Studio and CMake projects in Visual Studio (Obsługa narzędzia CMake w projektach Visual Studio i CMake w programie Visual Studio).
Tworzenie aplikacji klasycznych systemu Windows
Zapewniamy obecnie bardziej zaawansowane środowisko instalacji oryginalnego obciążenia C++. Dodaliśmy możliwe do wyboru składniki, które umożliwiają zainstalowanie tylko potrzebnych narzędzi. Wskazane rozmiary instalacji składników wymienionych w interfejsie użytkownika instalatora są niepoprawne i nie doceniają całkowitego rozmiaru.
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. Zainstaluj zalecane (wybrane) składniki VC++ 2017 v141 toolset (x86, x64) i Windows 10 SDK (10.0.nnnnn), aby upewnić się, że działa. Jeśli niezbędne narzędzia nie zostaną zainstalowane, projekty nie zostaną utworzone pomyślnie, a kreator przestanie odpowiadać.
Visual Studio 2017, wersja 15.5
Narzędzia kompilacji Visual C++ (wcześniej dostępne jako produkt autonomiczny) są teraz dołączane jako obciążenie w Instalator programu Visual Studio. To obciążenie instaluje tylko narzędzia wymagane do kompilowania projektów C++ bez instalowania środowiska IDE programu Visual Studio. Dostępne są zarówno zestawy narzędzi v140, jak i v141. Zestaw narzędzi w wersji 141 zawiera najnowsze ulepszenia programu Visual Studio 2017 w wersji 15.5. Aby uzyskać więcej informacji, zobacz Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets (Narzędzia Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolset).
Programowanie dla systemu Linux w języku C++
Popularne rozszerzenie Visual C++ for Linux Development stanowi obecnie cześć programu Visual Studio. Ta instalacja zawiera wszystko, czego potrzebujesz do tworzenia i debugowania aplikacji w języku C++ działających w środowisku systemu Linux.
Program Visual Studio 2017 w wersji 15.2
Wprowadzono ulepszenia w zakresie współużytkowania kodu międzyplatformowego i wizualizacji typów. Aby uzyskać więcej informacji, zobacz Ulepszenia języka C++ dla systemu Linux dotyczące współużytkowania kodu międzyplatformowego i wizualizacji typów.
Visual Studio 2017, wersja 15.5
- Obciążenie systemu Linux dodało obsługę rsync jako alternatywy dla sftp na potrzeby synchronizowania plików z zdalnymi maszynami z systemem Linux.
- Dodano obsługę kompilowania krzyżowego przeznaczonego dla mikrokontrolerów arm. Aby włączyć ją w instalacji, wybierz pakiet roboczy Programowanie dla systemu Linux za pomocą języka C++ , a następnie wybierz opcję Embedded and IoT Development (Programowanie osadzone i IoT). Ta opcja dodaje narzędzia do kompilowania krzyżowego arm GCC i Make do instalacji. Aby uzyskać więcej informacji, zobacz ARM GCC Cross Compilation in Visual Studio (Kompilacja krzyżowa GCC usługi ARM w programie Visual Studio).
- Dodano obsługę narzędzia CMake. Teraz możesz pracować nad istniejącą bazą kodu CMake bez konieczności konwertowania go na projekt programu Visual Studio. Aby uzyskać więcej informacji, zobacz Konfigurowanie projektu CMake systemu Linux.
- Dodano obsługę uruchamiania zadań zdalnych. Ta funkcja umożliwia uruchamianie dowolnego polecenia w systemie zdalnym zdefiniowanym w Menedżer połączeń programu Visual Studio. Zadania zdalne zapewniają również możliwość kopiowania plików do systemu zdalnego. Aby uzyskać więcej informacji, zobacz Konfigurowanie projektu CMake systemu Linux.
Visual Studio 2017 w wersji 15.7
- Różne ulepszenia scenariuszy obciążeń systemu Linux. Aby uzyskać więcej informacji, zobacz Ulepszenia obciążenia systemu Linux C++ w systemie Project System, Okno konsoli systemu Linux, rsync i Dołączanie do procesu.
- Funkcja IntelliSense dla nagłówków w zdalnych połączeniach z systemem Linux. Aby uzyskać więcej informacji, zobacz IntelliSense for Remote Linux Headers (Funkcja IntelliSense dla zdalnych nagłówków systemu Linux) i Configure a Linux CMake Project (Konfigurowanie projektu CMake systemu Linux).
Programowanie gier w języku 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.
Programowanie aplikacji mobilnych za pomocą języka C++ dla systemów Android i iOS
Program Visual Studio umożliwia obecnie programowanie i debugowanie aplikacji mobilnych przeznaczonych dla systemów Android oraz iOS.
Aplikacje uniwersalne systemu Windows
Język C++ stanowi składnik opcjonalny obciążenia Aplikacja uniwersalna systemu Windows. Obecnie należy ręcznie uaktualnić projekty języka C++. Możesz otworzyć projekt platforma uniwersalna systemu Windows przeznaczony dla wersji 140 w programie Visual Studio 2017. Należy jednak wybrać zestaw narzędzi platformy v141 na stronach właściwości projektu, jeśli nie masz zainstalowanego programu Visual Studio 2015.
Nowe opcje języka C++ na platformie platforma uniwersalna systemu Windows (UWP)
Masz teraz nowe opcje pisania i tworzenia pakietów aplikacji C++ dla platforma uniwersalna systemu Windows i Sklepu Windows: infrastruktura Mostek dla aplikacji klasycznych umożliwia spakowanie istniejącej aplikacji klasycznej lub obiektu COM do wdrożenia za pośrednictwem Sklepu Windows. Możesz też przeprowadzić wdrożenie za pośrednictwem istniejących kanałów za pośrednictwem ładowania bezpośredniego. Nowe możliwości w systemie Windows 10 umożliwiają dodawanie funkcji platformy UWP do aplikacji klasycznej na różne sposoby. Aby uzyskać więcej informacji, zobacz Mostek dla aplikacji klasycznych.
Visual Studio 2017, wersja 15.5
Dodano szablon projektu Projektu tworzenia pakietów aplikacji systemu Windows, który znacznie upraszcza tworzenie pakietów aplikacji klasycznych przy użyciu Mostek dla aplikacji klasycznych. Jest ona dostępna w obszarze Plik | Nowy | Projekt | Zainstalowane | Visual C++ | platforma uniwersalna systemu Windows. Aby uzyskać więcej informacji, zobacz Tworzenie pakietu aplikacji przy użyciu programu Visual Studio (Mostek dla aplikacji klasycznych).
Podczas pisania nowego kodu można teraz używać standardowego projekcji języka C++/WinRT dla środowisko wykonawcze systemu Windows zaimplementowanego wyłącznie w plikach nagłówkowych. Umożliwia korzystanie z interfejsów API środowisko wykonawcze systemu Windows i tworzenie ich przy użyciu dowolnego kompilatora C++ zgodnego ze standardami. Język C++/WinRT został zaprojektowany w celu zapewnienia deweloperom języka C++ pierwszego dostępu do nowoczesnego interfejsu API systemu Windows. Aby uzyskać więcej informacji, zobacz C++/WinRT.
Począwszy od kompilacji 17025 niejawnego programu Windows SDK Insider Preview, język C++/WinRT jest dołączony do zestawu Windows SDK. Aby uzyskać więcej informacji, zobacz C++/WinRT jest teraz dołączony do zestawu Windows SDK.
Zestaw narzędzi platformy Clang/C2
Zestaw narzędzi Clang/C2 dostarczany z programem Visual Studio 2017 obsługuje /bigobj
teraz przełącznik, który ma kluczowe znaczenie dla tworzenia dużych projektów. Zawiera również kilka ważnych poprawek błędów, zarówno w frontonie kompilatora, jak i zapleczu.
Analiza kodu C++
Podstawowe narzędzia do sprawdzania kodu C++ wymuszające stosowanie podstawowych wytycznych dotyczących języka C++ są obecnie dystrybuowane z programem Visual Studio. Włącz narzędzia do sprawdzania na stronie Rozszerzenia analizy kodu na stronach właściwości projektu. Rozszerzenia są następnie uwzględniane podczas uruchamiania analizy kodu. Aby uzyskać więcej informacji, zobacz Using the C++ Core Guidelines checkers (Korzystanie z podstawowych wytycznych języka C++).
Visual Studio 2017, wersja 15.3
- Dodano obsługę reguł związanych z zarządzaniem zasobami.
Visual Studio 2017, wersja 15.5
Nowe podstawowe wytyczne języka C++ obejmują inteligentną poprawność wskaźnika, prawidłowe użycie globalnych inicjatorów i flagowanie zastosowań konstrukcji, takich jak
goto
i nieprawidłowe rzutowania.Niektóre numery ostrzeżeń, które można znaleźć w wersji 15.3, nie są już dostępne w wersji 15.5. Ostrzeżenia te zostały zastąpione bardziej szczegółowymi operacjami sprawdzania.
Visual Studio 2017, wersja 15.6
- Dodano obsługę analizy pojedynczego pliku oraz ulepszenia wydajności w czasie wykonywania analizy. Aby uzyskać więcej informacji, zobacz C++ Static Analysis Improvements for Visual Studio 2017 15.6 Preview 2 (Ulepszenia analizy statycznej języka C++ dla programu Visual Studio 2017 15.6 (wersja zapoznawcza 2)
Visual Studio 2017 w wersji 15.7
- Dodano obsługę elementu
/analyze:ruleset
, która umożliwia określenie reguł analizy kodu do uruchomienia. - Dodano obsługę większej liczby reguł wytycznych podstawowych języka C++. Aby uzyskać więcej informacji, zobacz Using the C++ Core Guidelines checkers (Korzystanie z podstawowych wytycznych języka C++).
Testowanie jednostkowe w programie Visual Studio 2017
Visual Studio 2017, wersja 15.5
Adapter Google Test i Adapter Boost.Test są teraz dostępne jako składniki obciążenia Programowanie aplikacji klasycznych z językiem C++ . Są one zintegrowane z Eksploratorem testów. Dodano obsługę narzędzia CTest dla projektów CMake (przy użyciu funkcji Otwórz folder), chociaż pełna integracja z Eksploratorem testów nie jest jeszcze dostępna. Aby uzyskać więcej informacji, zobacz Pisanie testów jednostkowych dla języka C/C++.
Visual Studio 2017, wersja 15.6
Boost.Test
Dodano obsługę biblioteki dynamicznej.- Szablon
Boost.Test
elementu jest teraz dostępny w środowisku IDE.
Aby uzyskać więcej informacji, zobacz Boost.Test
Testowanie jednostkowe: obsługa biblioteki dynamicznej i Szablon nowego elementu.
Visual Studio 2017 w wersji 15.7
Dodano obsługę funkcji CodeLens dla projektów testów jednostkowych języka C++. Aby uzyskać więcej informacji, zobacz Ogłoszenie funkcji CodeLens na potrzeby testowania jednostkowego języka C++.
Diagnostyka grafiki programu Visual Studio
Narzędzia do diagnostyki grafiki programu Visual Studio: można ich używać do rejestrowania i analizowania problemów z renderowaniem i wydajnością w aplikacjach Direct3D. Używaj ich w aplikacjach uruchamianych lokalnie na komputerze z systemem Windows, w emulatorze urządzenia z systemem Windows lub na komputerze zdalnym lub urządzeniu.
Dane wejściowe i wyjściowe dla cieniowania wierzchołków i geometrycznych: możliwość wyświetlania danych wejściowych i wyjściowych cieniowania wierzchołków i cieniowania geometrii była jedną z najbardziej żądanych funkcji. Ta funkcja jest teraz obsługiwana w narzędziach. Wybierz etap VS lub GS w widoku Etapy potoku, aby rozpocząć inspekcję danych wejściowych i wyjściowych w poniższej tabeli.
Wyszukiwanie i filtrowanie w tabeli obiektów: zapewnia szybki i łatwy sposób znajdowania szukanych zasobów.
Historia zasobów: ten nowy widok zapewnia usprawniony sposób wyświetlania całej historii modyfikacji zasobu, który był używany podczas renderowania przechwyconej ramki. Aby wywołać historię dowolnego zasobu, kliknij ikonę zegara obok dowolnego hiperłącza zasobu.
Zostanie wyświetlone nowe okno narzędzia Historia zasobów wypełnione historią zmian zasobu.
Można przechwytywać ramki z włączonym przechwytywaniem pełnego stosu wywołań. Dzięki temu można szybko poznać kontekst każdego zdarzenia zmiany i sprawdzić go w projekcie programu Visual Studio. Ustaw opcję pełnego przechwytywania stosu w oknie dialogowym Opcje narzędzi > Programu Visual Studio w obszarze Diagnostyka grafiki.
Statystyki interfejsu API: wyświetl ogólne podsumowanie użycia interfejsu API w ramce. Jest to przydatne do odkrywania połączeń, które możesz nie zdawać sobie sprawy, że robisz w ogóle, lub dzwonisz zbyt często. To okno jest dostępne za pośrednictwem funkcji Wyświetl > statystyki interfejsu API w analizatorze grafiki programu Visual Studio.
Statystyki pamięci: wyświetl ilość pamięci przydzielanej przez sterownik dla zasobów tworzonych w ramce. To okno jest dostępne za pośrednictwem funkcji Wyświetl > statystyki pamięci w Analizatorze grafiki programu Visual Studio. Aby skopiować dane do pliku CSV do wyświetlania w arkuszu kalkulacyjnym, kliknij prawym przyciskiem myszy i wybierz polecenie Kopiuj wszystko.
Walidacja ramek: 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. Kliknij pozycję Wyświetl > walidację ramki w Analizatorze grafiki programu Visual Studio, aby otworzyć okno. Następnie kliknij przycisk Uruchom walidację , aby rozpocząć analizę. Ukończenie ramki może potrwać kilka minut, w zależności od złożoności ramki.
Analiza ramek dla D3D12: Użyj analizy ramek, aby analizować wydajność wywołań rysowania z ukierunkowanymi eksperymentami "what-if". Przejdź do karty Analiza ramek i uruchom analizę, aby wyświetlić raport.
Ulepszenia użycia procesora GPU: ślady otwierania można pobrać za pośrednictwem profilera użycia procesora GPU programu Visual Studio za pomocą elementu GPUView lub narzędzia Windows Analizator wydajności (WPA), aby uzyskać bardziej szczegółową analizę. Jeśli masz zainstalowany zestaw narzędzi Windows Performance Toolkit, istnieją dwa hiperlinki: jeden dla usługi WPA, a drugi dla widoku GPUView, w prawym dolnym rogu przeglądu sesji.
Ślady otwierane w widoku GPUView za pośrednictwem tego linku obsługują synchronizowane powiększanie osi czasu vs i gpuView oraz przesuwanie. Pole wyboru w programie VS określa, czy synchronizacja jest włączona, czy nie.