Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Visual Studio 2017 innehåller många uppdateringar och korrigeringar i C++-miljön. Vi har åtgärdat över 250 buggar och rapporterat problem i kompilatorn och verktygen. Många skickades av kunder via alternativen Rapportera ett problem och Ange ett förslag under Skicka feedback. Tack för att du rapporterade buggar!
Mer information om nyheter i hela Visual Studio finns i Nyheter i Visual Studio 2017. Information om vad som är nytt för C++ i Visual Studio 2019 finns i Nyheter för C++ i Visual Studio 2019. Information om vad som är nytt för C++ i Visual Studio 2015 och tidigare versioner finns i Visual C++ Nyheter 2003 till och med 2015.
Visual Studio 2017 C++-kompilator
Förbättringar av C++-överensstämmelse
Vi har uppdaterat C++-kompilatorn och standardbiblioteket i den här versionen med förbättrat stöd för C++11- och C++14-funktioner. Den innehåller även preliminärt stöd för vissa funktioner som förväntas vara i C++17-standarden. Detaljerad information finns i Förbättringar av C++-överensstämmelse i Visual Studio 2017.
Visual Studio 2017 version 15.5
Kompilatorn stöder cirka 75% av de funktioner som är nya i C++17, inklusive strukturerade bindningar, constexpr lambdas, if constexpr, infogade variabler, vikuttryck och tillägg noexcept i typsystemet. De här funktionerna är tillgängliga under alternativet /std:c++17 . Mer information finns i Förbättringar av C++-överensstämmelse i Visual Studio 2017
Visual Studio 2017 version 15.7
MSVC-kompilatorverktygen i Visual Studio version 15.7 överensstämmer nu med C++Standard. Mer information finns i Meddelande: MSVC överensstämmer med språkefterlevnad för C++ Standard och Microsoft C/C++.
Visual Studio 2017 version 15.8
Kompilatorväxeln /experimental:preprocessor möjliggör den nya experimentella MSVC-förprocessorn som så småningom följer alla tillämpliga C- och C++-standarder. Mer information finns i Översikt över den nya förprocessorn i MSVC.
Nya kompilatoralternativ
/permissive-: Aktivera alla strikta standardefterlevnadskompilatoralternativ och inaktivera de flesta Microsoft-specifika kompilatortillägg (men inte__declspec(dllimport), till exempel). Det här alternativet är aktiverat som standard i Visual Studio 2017 version 15.5./permissive-Överensstämmelseläget innehåller stöd för tvåfasnamnsökning. Mer information finns i Förbättringar av C++-överensstämmelse i Visual Studio./diagnostics: Aktiverar visning av diagnostikfelet eller varningsplatsen på tre olika sätt: bara radnumret, radnumret och kolumnen, eller radnumret och kolumnen, med en caret under den felande kodraden./debug:fastlink: Aktivera upp till 30% snabbare inkrementella länktider (jämfört med Visual Studio 2015) genom att inte kopiera all felsökningsinformation till PDB-filen. PDB-filen pekar i stället på felsökningsinformationen för objektet och biblioteksfilerna som används för att skapa den körbara filen. Se Snabbare C++-byggcykel i VS "15" med/Debug:fastlinkoch rekommendationer för att påskynda C++-versioner i Visual Studio.Visual Studio 2017 tillåter användning
/sdlmed/await. Vi har tagit bort begränsningen/RTCmed Coroutines.
Visual Studio 2017 version 15.3
/std:c++14och/std:c++latest: Med de här kompilatoralternativen kan du välja specifika versioner av programmeringsspråket ISO C++ i ett projekt. De flesta av de nya standardfunktionerna för utkast skyddas av alternativet/std:c++latest./std:c++17aktiverar uppsättningen C++17-funktioner som implementeras av kompilatorn. Det här alternativet inaktiverar kompilator- och standardbiblioteksstöd för funktioner efter C++17: de som ändras eller är nya i senare versioner av arbetsutkastet och defekta uppdateringar av C++ Standard. Om du vill aktivera dessa funktioner använder du/std:c++latest.
Codegen, säkerhet, diagnostik och versionshantering
Den här versionen innehåller flera förbättringar inom optimering, kodgenerering, versionshantering av verktygsuppsättningar och diagnostik. Några viktiga förbättringar är:
- Förbättrad kodgenerering av loopar: Stöd för automatisk vektorisering av division av konstanta heltal, bättre identifiering av memsetmönster.
- Förbättrad kodsäkerhet: Förbättrad utsläpp av buffertöverskriden kompilatordiagnostik och
/guard:cfskyddar nu switch-instruktioner som genererar hopptabeller. - Versionshantering: Värdet för det inbyggda makrot för förprocessorn _MSC_VER uppdateras monotont vid varje uppdatering av Visual C++-verktygsuppsättningen. Mer information finns i Visual C++ Compiler Version.
- Ny verktygsuppsättningslayout: Kompilatorn och relaterade byggverktyg har en ny plats- och katalogstruktur på utvecklingsdatorn. Den nya layouten möjliggör installationer sida vid sida av flera versioner av kompilatorn. Mer information finns i Layout för kompilatorverktyg i Visual Studio 2017.
- Förbättrad diagnostik: Utdatafönstret visar nu kolumnen där ett fel inträffar. Mer information finns i Förbättringar av C++-kompilatordiagnostik i VS "15" Förhandsversion 5.
- När du använde coroutines togs det experimentella nyckelordsutbytet (tillgängligt under alternativet
/await) bort. Koden bör uppdateras så att den användsco_yieldi stället. Mer informationyieldfinns i nyckelord som ska blico_yieldi VS 2017.
Visual Studio 2017 version 15.3
Förbättringar av diagnostiken i kompilatorn. Mer information finns i Diagnostiska förbättringar i Visual Studio 2017 15.3.0.
Visual Studio 2017 version 15.5
Prestanda för Visual C++-körning fortsätter att förbättras genom bättre genererad kodkvalitet. Nu kan du bara kompilera om koden och appen körs snabbare. Några av kompilatoroptimeringarna är helt nya, till exempel vektorisering av villkorliga skalärlager, kombination av anrop sin(x) och cos(x) till en ny sincos(x)och eliminering av redundanta instruktioner från SSA-optimeraren. Andra kompilatoroptimeringar är förbättringar av befintliga funktioner, till exempel: vektoriserar-heuristik för villkorsuttryck, bättre loopoptimeringar och flyttal min/max-kodgen. Länkaren har en ny och snabbare /OPT:ICF implementering, vilket kan resultera i upp till 9% länktidshastigheter, och det finns andra korrigeringar perf i inkrementell länkning. Mer information finns i /OPT (optimeringar) och /INCREMENTAL (länk stegvis).
Microsoft C++-kompilatorn stöder Intels AVX-512. Den har instruktioner för vektorlängd som ger nya funktioner i AVX-512 till 128-bitars och 256-bitars breda register.
Alternativet /Zc:noexceptTypes- kan användas för att återgå till C++14-versionen av noexcept när du använder C++17-läge i allmänhet. Med det här alternativet kan du uppdatera källkoden så att den överensstämmer med C++17 utan att behöva skriva om all throw() kod samtidigt. Mer information finns i borttagning av dynamisk undantagsspecifikation och noexcept.
Visual Studio 2017 version 15.7
- Ny kompilatorväxel /Qspectre för att minimera spekulativa sidokanalattacker vid körning. Mer information finns i Spectre-åtgärder i MSVC.
- Ny diagnostikvarning för Spectre-åtgärd. Mer information finns i Spectre Diagnostic in Visual Studio 2017 Version 15.7 Preview 4.
- Ett nytt värde för /Zc,
/Zc:__cplusplus, möjliggör korrekt rapportering av C++-standardsupporten. När växeln till exempel har angetts och kompilatorn är i/std:c++17läge expanderas värdet till201703L. Mer information finns i MSVC nu korrekt rapporter __cplusplus.
C++-standardbibliotek
Förbättringar av korrekthet
Visual Studio 2017 RTM (version 15.0)
- Mindre
basic_string_ITERATOR_DEBUG_LEVEL != 0diagnostikförbättringar. När en IDL-kontroll snubblar i strängmaskiner rapporterar den nu det specifika beteende som orsakade resan. I stället för "string iterator not dereferencable" får du till exempel "cannot dereference string iterator because iterator because iterator is out of range (e.g. an end iterator)". - Åtgärdade flytttilldelningsoperatorn
std::promise, vilket tidigare kunde leda till att koden blockerades för alltid. - Korrigerade kompilatorfel med implicit
atomic<T*>konvertering tillT*. -
pointer_traits<Ptr>identifierarPtr::rebind<U>nu korrekt . - En kvalificerare som saknas
constimove_iteratorundertraktionsoperatorn har åtgärdats. - Den tysta felaktiga kodgenen har åtgärdats för tillståndskänsliga användardefinierade allokerare som begär
propagate_on_container_copy_assignmentochpropagate_on_container_move_assignment. -
atomic<T>tolererar nu överlagradeoperator&(). - Något bättre kompilatordiagnostik för felaktiga
bind()anrop.
Det finns fler standardbiblioteksförbättringar i Visual Studio 2017 RTM. En fullständig lista finns i C++-teamets bloggpost Standardbibliotekskorrigeringar i VS 2017 RTM.
Visual Studio 2017 version 15.3
- Standardbibliotekscontainrar klämmer nu fast dem
max_size()i stället förnumeric_limits<difference_type>::max()imax()size_type. Den här ändringen säkerställer att resultatet avdistance()på iteratorer från containern kan representeras i returtypen .distance() - Specialiseringen saknades
auto_ptr<void>. -
for_each_n()Algoritmerna ,generate_n()ochsearch_n()kunde tidigare inte kompileras om längdargumentet inte var en integrerad typ. De försöker nu konvertera icke-integrala längder till iteratorerna.difference_type -
normal_distribution<float>avger inte längre varningar i standardbiblioteket om att minska från dubbel till flyttal. -
basic_stringVissa åtgärder som användesnposi stället för vid kontroll avmax_size()maximalt storleksspill har åtgärdats. -
condition_variable::wait_for(lock, relative_time, predicate)skulle vänta hela den relativa tiden om det fanns en falsk vaka. Nu väntar den bara på ett enda intervall av den relativa tiden. -
future::get()ogiltigförklararfuturenu , som standard kräver. -
iterator_traits<void *>brukade vara ett svårt fel eftersom det försökte bildavoid&. Nu blir det en tom struct för att tillåta användning aviterator_traitsi "is iterator" SFINAE-villkor. - Några varningar som rapporterades av Clang
-Wsystem-headersvar fasta. - Också fast "undantagsspecifikation i deklarationen matchar inte tidigare deklaration" som rapporterats av Clang
-Wmicrosoft-exception-spec. - Också fast mem-initializer-list ordering varningar rapporteras av Clang och C1XX.
- De osorterade containrarna växlade inte sina hashfunktioner eller predikat när själva containrarna byttes ut. Nu gör de det.
- Många växlingsåtgärder för containrar är nu markerade
noexcept(eftersom vårt standardbibliotek aldrig har för avsikt att utlösa ett undantag vid identifiering av odefinierade beteendevillkor som intepropagate_on_container_swapär lika med allokeraren). - Många
vector<bool>åtgärder har nu markeratsnoexcept. - Standardbiblioteket tillämpar nu matchande allokerare
value_type(i C++17-läge) med en undantagslucka. - Vissa villkor där self-range-insert i
basic_stringskulle förvränga innehållet i strängarna har åtgärdats. (Obs! Självområdesinfogning i vektorer är fortfarande förbjudet enligt standarden.) -
basic_string::shrink_to_fit()påverkas inte längre av allokerarenspropagate_on_container_swap. -
std::decayhanterar nu avskyvärda funktionstyper, d.v.s. funktionstyper som är cv-kvalificerade, ref-kvalificerade eller båda. - Ändrade omfattar direktiv för att använda korrekt skiftlägeskänslighet och snedstreck, vilket förbättrar portabiliteten.
- Den fasta varningen C4061 "enumerator "enumerator" i växeln för uppräkning hanteras inte uttryckligen av en ärendeetikett. Den här varningen är inaktiverad som standard och har åtgärdats som ett undantag från standardbibliotekets allmänna princip för varningar. (Standardbiblioteket är
/W4rent, men försöker inte vara/Wallrent. Många varningar som inte är standard är ovanligt högljudda och är inte avsedda att användas regelbundet.) - Förbättrade
std::listfelsökningskontroller. Lista iteratorer kontrolleraroperator->()nu , ochlist::unique()markerar nu iteratorer som ogiltiga. - Metaprogrammet uses-allocator har åtgärdats i
tuple.
Visual Studio 2017 version 15.5
-
std::partitionanropar nu predikattidernaNi stället förN + 1tider, som standard kräver. - Försök att undvika magiska statiska objekt i version 15.3 repareras i version 15.5.
-
std::atomic<T>måsteTinte längre vara standardkonstruktiv. - Heap-algoritmer som tar logaritmisk tid fungerar annorlunda när iteratorfelsökning är aktiverat. De gör inte längre en linjär tids försäkran om att indata i själva verket är en heap.
-
__declspec(allocator)är nu endast skyddad för C1XX, för att förhindra varningar från Clang, som inte förstår denna declspec. -
basic_string::nposär nu tillgänglig som en kompileringstidskonstant. -
std::allocatori C++17-läge hanterar nu korrekt allokering av överjusterade typer, det vill ex. typer vars justering är större änmax_align_t, såvida inte inaktiverad av/Zc:alignedNew-. Till exempel är vektorer för objekt med justering på 16 byte eller 32 byte nu korrekt justerade för SSE- och AVX-instruktioner.
Anpassningsförbättringar
- Vi har lagt till <alla>, <string_view>,
apply(),make_from_tuple(). - Valfri,> variant, och cstdalign> har lagts till<.<
shared_ptr::weak_type>< - Aktiverad C++14
constexprimin(initializer_list),max(initializer_list)ochminmax(initializer_list), ochmin_element(),max_element()ochminmax_element().
Mer information finns i Språkefterlevnad för Microsoft C/C++.
Visual Studio 2017 version 15.3
- Flera andra C++17-funktioner har implementerats. Mer information finns i microsoft C++-språkefterlevnadstabell.
- Implementerad P0602R0 "variant och valfritt bör sprida copy/move triviality".
- Standardbiblioteket tolererar nu officiellt att dynamisk RTTI inaktiveras via alternativet /GR- . Både
dynamic_pointer_cast()ochrethrow_if_nested()kräverdynamic_casti sig , så standardbiblioteket markerar dem nu som=deleteunder/GR-. - Även när dynamisk RTTI inaktiveras via
/GR-är "statisk RTTI" i form avtypeid(SomeType)fortfarande tillgängligt och driver flera standardbibliotekskomponenter. Standardbiblioteket stöder nu även inaktivering av den här funktionen via/D_HAS_STATIC_RTTI=0. Den här flaggan inaktiverarstd::anyockså medlemsfunktionernatarget()std::functionochtarget_type()ochget_deleter()funktionenstd::shared_ptrvänmedlem för ochstd::weak_ptr. - Standardbiblioteket använder nu C++14
constexprvillkorslöst i stället för villkorsdefinierade makron. - Standardbiblioteket använder nu aliasmallar internt.
- Standardbiblioteket använder
nullptrnu internt i stället förnullptr_t{}. (Intern användning av NULL har utrotats. Intern användning av 0 som null rensas gradvis.) - Standardbiblioteket använder
std::move()nu internt i stället för att stilistiskt missbrukastd::forward(). - Har ändrats
static_assert(false, "message")till#error message. Den här ändringen förbättrar kompilatordiagnostiken eftersom#errorkompilering omedelbart stoppas. - Standardbiblioteket markerar inte längre funktioner som
__declspec(dllimport). Modern länkteknik kräver det inte längre. - Extraherade SFINAE till standardmallargument, vilket minskade oredan jämfört med returtyper och funktionsargumenttyper.
- Felsöka kontroller slumpmässigt <> använder nu standardbibliotekets vanliga maskiner, i stället för den interna funktionen
_Rng_abort(), som anropadefputs()tillstderr. Implementeringen av den här funktionen behålls för binär kompatibilitet. Vi tar bort den i nästa binär-inkompatibla version av standardbiblioteket.
Visual Studio 2017 version 15.5
- Flera standardbiblioteksfunktioner har lagts till, föråldrats eller tagits bort enligt C++17-standarden. Mer information finns i Förbättringar av C++-överensstämmelse i Visual Studio.
- Experimentellt stöd för följande parallella algoritmer:
all_ofany_offor_eachfor_each_nnone_ofreducereplacereplace_ifsort
- Signaturerna för följande parallella algoritmer läggs till men parallelliseras inte just nu. Profilering visade ingen fördel med parallellisering av algoritmer som bara flyttar eller permuterar element:
copycopy_nfillfill_nmovereversereverse_copyrotaterotate_copyswap_ranges
Visual Studio 2017 version 15.6
<memory_resource>- Biblioteksgrunder V1
- Ta
polymorphic_allocatorbort tilldelning - Förbättra argumentavdraget för klassmallar
Visual Studio 2017 version 15.7
- Stöd för parallella algoritmer är inte längre experimentellt
- En ny implementering av
<filesystem> - Elementära strängkonverteringar (partiella)
std::launder()std::bytehypot(x,y,z)- Undvika onödigt förfall
- Matematiska specialfunktioner
constexpr char_traits- Avdragsguider för standardbiblioteket
Mer information finns i Språkefterlevnad för Microsoft C/C++.
Prestanda- och dataflödeskorrigeringar
- Överlagringar
basic_string::find(char)anropadetraits::findbara en gång. Tidigare implementerades den som en allmän strängsökning efter en sträng med längd 1. -
basic_string::operator==kontrollerar nu strängens storlek innan du jämför strängarnas innehåll. - Tog bort kontrollkopplingen i
basic_string, vilket var svårt för kompilatoroptimeraren att analysera. För alla korta strängar har anropreservefortfarande en icke-nollkostnad för att inte göra någonting. -
std::vectorhar setts över för korrekthet och prestanda: alias under infognings- och emplace-åtgärder hanteras nu korrekt enligt standard, den starka undantagsgarantin tillhandahålls nu när standard viamove_if_noexcept()och annan logik krävs, och infoga och förplacerar färre elementåtgärder. - C++-standardbiblioteket undviker nu att avreferera null fancy-pekare.
- Förbättrad
weak_ptr::lock()prestanda. - För att öka kompilatorns dataflöde undviker C++ standardbibliotekshuvuden nu att inkludera deklarationer för onödiga inbyggda kompilatorer.
- Förbättrade prestanda
std::stringför ochstd::wstringflytta konstruktorer med mer än tre gånger.
Visual Studio 2017 version 15.3
- Arbetade med interaktioner med
noexcept, vilket förhindrade inlining avstd::atomicimplementeringen i funktioner som använder SEH (Structured Exception Handling). - Standardbibliotekets interna
_Deallocate()funktion har ändrats så att den optimeras till mindre kod, så att den kan infogas på fler platser. - Har ändrats
std::try_lock()för att använda packexpansion i stället för rekursion. - Förbättrade algoritmen
std::lock()för undvikande av dödläge för att användalock()åtgärder i stället för att snurra påtry_lock()alla lås. - Aktiverade optimering av namngivet returvärde i
system_category::message(). -
conjunctionochdisjunctioninstansieraN + 1typer i stället för2N + 2typer. -
std::functioninstansierar inte längre allokerarens stödmaskiner för varje typraderad anropsbar, förbättrar dataflödet och minskar .obj storlek i program som skickar många distinkta lambdas tillstd::function. -
allocator_traits<std::allocator>innehåller manuellt infogadestd::allocatoråtgärder, vilket minskar kodstorleken i kod som endast interagerar medstd::allocatorviaallocator_traits(det vill: i de flesta kod). - Det minimala allokeringsgränssnittet C++11 hanteras nu av standardbiblioteksanropet
allocator_traitsdirekt, i stället för att omsluta allokeraren i en intern klass_Wrap_alloc. Den här ändringen minskar den kodstorlek som genereras för allokeringsstöd, förbättrar optimerarens möjlighet att resonera om standardbibliotekscontainrar i vissa fall och ger en bättre felsökningsupplevelse (som nu ser du allokeringstypen i stället_Wrap_alloc<your_allocator_type>för i felsökningsprogrammet). - Tog bort metaprogrammering för anpassade
allocator::reference, som allokerare inte får anpassa. (Allokerare kan göra containrar använda fancy pekare men inte fancy referenser.) - Kompilatorns klientdel lärdes att packa upp felsöknings iteratorer i intervallbaserade för loopar, vilket förbättrar prestandan för felsökningsversioner.
- Den
basic_stringinterna krympningssökvägen förshrink_to_fit()ochreserve()är inte längre i sökvägen för att omplacera åtgärder, vilket minskar kodstorleken för alla muterande medlemmar. - Den
basic_stringinterna tillväxtsökvägen finns inte längre i sökvägenshrink_to_fit()till . - De
basic_stringmuterande åtgärderna räknas nu in i icke-allokering av snabb sökväg och allokering av funktioner för långsam sökväg, vilket gör det mer sannolikt att det vanliga fallet utan omallokering infogas i anropare. - De
basic_stringmuterande åtgärderna konstruerar nu omallokerade buffertar i önskat tillstånd i stället för att ändra storlek på plats. En infogning i början av en sträng flyttar nu innehållet efter infogningen exakt en gång. Den har flyttats ned eller till den nyligen allokerade bufferten. Den flyttas inte längre två gånger i omlokaliseringsfallet, först till den nyligen allokerade bufferten och sedan nedåt. - Åtgärder som anropar C-standardbiblioteket i <strängen>
errnocachelagr nu adressen för att ta bort upprepad interaktion med TLS. - Förenklade implementeringen
is_pointer. - Har ändrat funktionsbaserat uttryck SFINAE till
structochvoid_t-baserat. - Standardbiblioteksalgoritmer undviker nu postincrementing-iteratorer.
- Varningar om trunkering har åtgärdats vid användning av 32-bitars allokerare i 64-bitarssystem.
-
std::vectorflytta tilldelningen är nu effektivare i fallet med icke-POCMA-icke-equal-allocator genom att återanvända bufferten när det är möjligt.
Visual Studio 2017 version 15.5
-
basic_string<char16_t>engagerar nu sammamemcmp,memcpyoch liknande optimeringar sombasic_string<wchar_t>engagerar. - En begränsning för optimeraren som förhindrade funktionspekare från att infogas, som exponerades av vårt arbete med att "undvika kopieringsfunktioner" i Visual Studio 2015 Update 3, har bearbetats och återställt prestanda
lower_bound(iter, iter, function pointer)för . - Omkostnaderna för iteratorfelsökningens orderverifiering av indata till
includes,set_difference,set_symmetric_differenceochset_unionminskades genom att iteratorer togs bort innan beställningen kontrollerades. -
std::inplace_mergehoppar nu över element som redan är på plats. - Konstruktionen
std::random_devicekonstruerar inte längre och förstör sedan enstd::string. -
std::equalochstd::partitionhade ett hopptrådsoptimeringspass som sparar en iteratorjämförelse. - När
std::reverseskickas pekare till trivialt kopierbarT, skickas den nu till en handskriven vektoriserad implementering. -
std::fill,std::equalochstd::lexicographical_comparefick lära sig att skicka tillmemsetochmemcmpförstd::byteochgsl::byte(och andra teckenliknande uppräkningar och uppräkningsklasser). Eftersomstd::copysändningar med hjälp avis_trivially_copyablebehövdes inga ändringar. - Standardbiblioteket innehåller inte längre destruktorer med tomma klammerparenteser vars enda beteende var att göra typerna icke-trivialt förstörbara.
Andra bibliotek
Stöd för bibliotek med öppen källkod
Vcpkg är ett kommandoradsverktyg med öppen källkod som avsevärt förenklar processen med att hämta och skapa C++-statiska libs med öppen källkod och DLLS i Visual Studio. Mer information finns i vcpkg.
CPPRest SDK 2.9.0
Visual Studio 2017 version 15.5
CPPRestSDK, ett plattformsoberoende webb-API för C++, uppdateras till version 2.9.0. Mer information finns i CppRestSDK 2.9.0 är tillgängligt på GitHub.
ATL
Visual Studio 2017 version 15.5
- Ännu en uppsättning korrigeringar för namnuppslagskonformhet
- Befintliga flyttkonstruktorer och flytttilldelningsoperatorer är nu korrekt markerade som icke-inläsande
- Oövertrycka giltig varning C4640 om trådsäker init för lokal statisk i atlstr.h
- Trådsäker initiering av lokala statiska objekt inaktiverades automatiskt i XP-verktygsuppsättningen när du använde ATL för att skapa en DLL. Nu är det inte det. Du kan lägga till
/Zc:threadSafeInit-dina Projektinställningar om du inte vill ha en trådsäker initiering.
Visual C++ runtime
- Nytt huvud "cfguard.h" för Control Flow Guard-symboler.
Visual Studio 2017 C++ IDE
- Konfigurationsändringsprestanda är nu bättre för C++-interna projekt och mycket bättre för C++/CLI-projekt. När en lösningskonfiguration aktiveras för första gången går det snabbare och alla senare aktiveringar av den här lösningskonfigurationen är nästan omedelbar.
Visual Studio 2017 version 15.3
- Flera projekt- och kodguider har skrivits om i dialogrutan signatur.
- Lägg till klass startar nu guiden Lägg till klass direkt. Alla andra objekt som tidigare fanns här är nu tillgängliga under Lägg till > nytt objekt.
- Win32-projekt finns nu under kategorin Windows Desktop i dialogrutan Nytt projekt .
- Mallarna för Windows-konsolen och skrivbordsprogrammet skapar nu projekten utan att visa en guide. Det finns en ny Windows Desktop-guide under samma kategori som visar samma alternativ som den gamla guiden för Win32-konsolprogram .
Visual Studio 2017 version 15.5
Flera C++-åtgärder som använder IntelliSense-motorn för refaktorisering och kodnavigering körs mycket snabbare. Följande siffror baseras på Visual Studio Chromium-lösningen med 3 500 projekt:
| Feature | Prestandaförbättring |
|---|---|
| Rename | 5,3 x |
| Ändra signatur | 4,5 x |
| Hitta alla referenser | 4,7 x |
C++ stöder nu Ctrl+Klicka på Gå till definition, vilket gör det enkelt att navigera med musen till definitioner. Structure Visualizer från Productivity Power Tools-paketet ingår nu också i produkten som standard.
IntelliSense
Den nya SQLite-baserade databasmotorn används nu som standard. Den nya motorn påskyndar databasåtgärder som Go To Definition och Find All References. Det förbättrar avsevärt den inledande lösningens parsningstid. Inställningen flyttades till Verktyg > Alternativ > Textredigerare > C/C++ > Avancerat. (Det var tidigare under ... C/C++ > Experimentell.)
Vi har förbättrat IntelliSense-prestanda för projekt och filer som inte använder förkompilerade rubriker – en automatisk förkompilerad rubrik skapas för rubriker i den aktuella filen.
Vi har lagt till felfiltrering och hjälp för IntelliSense-fel i fellistan. Om du klickar på felkolumnen kan du nu filtrera. Om du klickar på de specifika felen eller trycker på F1 startas även en onlinesökning efter felmeddelandet.
Möjligheten att filtrera objekt i medlemslistan har lagts till efter typ.
Lade till en ny experimentell Prediktiv IntelliSense-funktion som ger sammanhangsberoende filtrering av vad som visas i medlemslistan. Mer information finns i C++ IntelliSense-förbättringar – Förutsägande IntelliSense och filtrering.
Hitta alla referenser (Skift+F12) hjälper dig nu att enkelt ta dig runt, även i komplexa kodbaser. Det ger avancerad gruppering, filtrering, sortering, sökning i resultat och (för vissa språk) färgläggning, så att du kan få en tydlig förståelse för dina referenser. För C++innehåller det nya användargränssnittet information om huruvida vi läser från eller skriver till en variabel.
Funktionen Dot-to-Arrow IntelliSense har flyttats från experimentell till avancerad och är nu aktiverad som standard. Redigeringsfunktionerna Expandera omfång och Expandera prioritet har flyttats från experimentell till avancerad.
De experimentella refaktoriseringsfunktionerna Ändra signatur och Extrahera funktion är nu tillgängliga som standard.
En experimentell funktion för "Snabbare projektbelastning" har lagts till för C++-projekt. Nästa gång du öppnar ett C++-projekt läses det in snabbare och tiden efter det läses det in mycket snabbare!
Vissa av dessa funktioner är gemensamma för andra språk, och vissa är specifika för C++. Mer information om dessa nya funktioner finns i Tillkännagivande av Visual Studio "15" Förhandsversion 5.
Visual Studio 2017 version 15.7
- Stöd har lagts till för ClangFormat. Mer information finns i ClangFormat Support i Visual Studio 2017.
Icke-MSBuild-projekt med öppen mapp
Visual Studio 2017 introducerar funktionen Öppna mapp . Det gör att du kan koda, skapa och felsöka i en mapp som innehåller källkod utan att behöva skapa några lösningar eller projekt. Nu är det enklare att komma igång med Visual Studio, även om projektet inte är ett MSBuild-baserat projekt. Öppna mapp ger dig åtkomst till kraftfulla funktioner för kodtolkning, redigering, skapande och felsökning. De är samma som Visual Studio redan tillhandahåller för MSBuild-projekt. Mer information finns i Öppna mappprojekt för C++.
- Förbättringar av open folder-upplevelsen. Du kan anpassa upplevelsen via dessa .json filer:
- CppProperties.json för att anpassa IntelliSense- och surfupplevelsen.
- Tasks.json för att anpassa byggstegen.
- Launch.json för att anpassa felsökningsfunktionen.
Visual Studio 2017 version 15.3
- Förbättrat stöd för alternativa kompilatorer och byggmiljöer som MinGW och Cygwin. Mer information finns i Använda MinGW och Cygwin med Visual C++ och Öppna mapp.
- Stöd har lagts till för att definiera globala och konfigurationsspecifika miljövariabler i CppProperties.json och CMakeSettings.json. Dessa miljövariabler kan användas genom felsökningskonfigurationer som definierats i launch.vs.json och uppgifter i tasks.vs.json. Mer information finns i Anpassa din miljö med Visual C++ och Öppna mapp.
- Förbättrat stöd för CMake ninja generator, inklusive möjligheten att enkelt rikta 64-bitars plattformar.
CMake-stöd via öppen mapp
Visual Studio 2017 introducerar stöd för att använda CMake-projekt utan att konvertera till MSBuild-projektfiler (.vcxproj). Mer information finns i CMake-projekt i Visual Studio. Om du öppnar CMake-projekt med Öppen mapp konfigureras miljön automatiskt för C++-redigering, skapande och felsökning.
C++ IntelliSense fungerar utan att du behöver skapa en CppProperties.json fil i rotmappen. Vi har lagt till en ny listruta så att användarna enkelt kan växla mellan konfigurationer som tillhandahålls av CMake och CppProperties.json filer.
Ytterligare konfiguration stöds via en CMakeSettings.json fil som finns i samma mapp som den CMakeLists.txt filen.
Visual Studio 2017 version 15.3
- Stöd har lagts till för CMake Ninja-generatorn.
Visual Studio 2017 version 15.4
- Stöd har lagts till för att importera befintliga CMake-cacheminnen.
Visual Studio 2017 version 15.5
- Stöd har lagts till för CMake 3.11, kodanalys i CMake-projekt, målvyn i Solution Explorer, alternativ för cachegenerering och enkel filkompilering. Mer information finns i CMake-stöd i Visual Studio - och CMake-projekt i Visual Studio.
Utveckling av Windows-skrivbord
Vi tillhandahåller nu en mer detaljerad installationsupplevelse för att installera den ursprungliga C++-arbetsbelastningen. Vi har lagt till valbara komponenter som gör att du kan installera bara de verktyg som du behöver. De angivna installationsstorlekarna för de komponenter som anges i installationsgränssnittet är felaktiga och underskattar den totala storleken.
Om du vill skapa Win32-projekt i C++-skrivbordsarbetsbelastningen måste du installera både en verktygsuppsättning och en Windows SDK. Installera de rekommenderade (valda) komponenterna VC++ 2017 v141-verktygsuppsättningen (x86, x64) och Windows 10 SDK (10.0.nnnnnn) för att se till att det fungerar. Om de nödvändiga verktygen inte har installerats skapas inte projekt och guiden slutar svara.
Visual Studio 2017 version 15.5
Visual C++ Build-verktygen (tidigare tillgängliga som en fristående produkt) ingår nu som en arbetsbelastning i Visual Studio Installer. Den här arbetsbelastningen installerar endast de verktyg som krävs för att skapa C++-projekt utan att installera Visual Studio IDE. Både verktygsuppsättningarna v140 och v141 ingår. Verktygsuppsättningen v141 innehåller de senaste förbättringarna i Visual Studio 2017 version 15.5. Mer information finns i Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets (Verktyg för VS2017 och VS2015 MSVC).
Linux-utveckling med C++
Det populära tillägget Visual C++ för Linux Development är nu en del av Visual Studio. Den här installationen innehåller allt du behöver för att utveckla och felsöka C++-program som körs i en Linux-miljö.
Visual Studio 2017 version 15.2
Förbättringar har gjorts i plattformsoberoende koddelning och typvisualisering. Mer information finns i Förbättringar av Linux C++ för plattformsoberoende koddelning och typvisualisering.
Visual Studio 2017 version 15.5
- Linux-arbetsbelastningen har lagt till stöd för rsync som ett alternativ till sftp för synkronisering av filer till fjärranslutna Linux-datorer.
- Stöd läggs till för korskompilering som riktar sig till ARM-mikrostyrenheter. Om du vill aktivera den i installationen väljer du Linux-utveckling med C++ -arbetsbelastning och väljer alternativet för Inbäddad och IoT-utveckling. Det här alternativet lägger till ARM GCC-verktygen för korskompilering och Gör i installationen. Mer information finns i ARM GCC Cross Compilation i Visual Studio.
- Stöd har lagts till för CMake. Nu kan du arbeta med din befintliga CMake-kodbas utan att behöva konvertera den till ett Visual Studio-projekt. Mer information finns i Konfigurera ett Linux CMake-projekt.
- Stöd har lagts till för att köra fjärruppgifter. Med den här funktionen kan du köra alla kommandon på ett fjärrsystem som definieras i Anslutningshanteraren i Visual Studio. Fjärruppgifter ger också möjlighet att kopiera filer till fjärrsystemet. Mer information finns i Konfigurera ett Linux CMake-projekt.
Visual Studio 2017 version 15.7
- Olika förbättringar av Linux-arbetsbelastningsscenarier. Mer information finns i Förbättringar av Linux C++-arbetsbelastningar i Project System, Linux Console Window, rsync och Attach to Process.
- IntelliSense för huvuden på linux-fjärranslutningar. Mer information finns i IntelliSense för Linux-fjärrhuvuden och Konfigurera ett Linux CMake-projekt.
Spelutveckling med C++
Använd den fulla kraften i C++ för att skapa professionella spel som drivs av DirectX eller Cocos2d.
Mobil utveckling med C++ för Android och iOS
Nu kan du skapa och felsöka mobilappar med hjälp av Visual Studio som kan rikta in sig på Android och iOS.
Universella Windows-appar
C++ är en valfri komponent för arbetsbelastningen Universell Windows-app. För närvarande måste du uppgradera C++-projekt manuellt. Du kan öppna ett v140-målbaserat Universal Windows Platform-projekt i Visual Studio 2017. Du måste dock välja verktygsuppsättningen för v141-plattformen på projektegenskapssidorna om du inte har Visual Studio 2015 installerat.
Nya alternativ för C++ på Universal Windows Platform (UWP)
Nu har du nya alternativ för att skriva och paketera C++-program för den universella Windows-plattformen och Windows Store: Med skrivbordsbrygginfrastrukturen kan du paketera ditt befintliga skrivbordsprogram eller COM-objekt för distribution via Windows Store. Eller för distribution via dina befintliga kanaler via sidoinläsning. Med nya funktioner i Windows 10 kan du lägga till UWP-funktioner i ditt skrivbordsprogram på olika sätt. Mer information finns i Desktop Bridge.
Visual Studio 2017 version 15.5
En projektmall för Windows Application Packaging Project läggs till, vilket avsevärt förenklar paketeringen av skrivbordsprogram med Desktop Bridge. Den är tillgänglig under Arkiv | Ny | Projekt | Installerat | Visual C++ | Universell Windows-plattform. Mer information finns i Paketera en app med hjälp av Visual Studio (Desktop Bridge).
När du skriver ny kod kan du nu använda C++/WinRT, en C++-standardspråkprojektion för Windows Runtime som endast implementeras i huvudfiler. Det gör att du kan använda och skapa Windows Runtime-API:er med hjälp av alla standardkonforma C++-kompilatorer. C++/WinRT är utformat för att ge C++-utvecklare förstklassig åtkomst till det moderna Windows-API:et. Mer information finns i C++/WinRT.
Från och med version 17025 av Windows SDK Insider Preview ingår C++/WinRT i Windows SDK. Mer information finns i C++/WinRT ingår nu i Windows SDK.
Plattformsverktygsuppsättningen Clang/C2
Verktygsuppsättningen Clang/C2 som levereras med Visual Studio 2017 stöder nu växeln /bigobj , vilket är avgörande för att skapa stora projekt. Den innehåller också flera viktiga felkorrigeringar, både i kompilatorns klientdel och serverdel.
C++-kodanalys
C++ Core Checkers för att framtvinga C++ Core-riktlinjerna distribueras nu med Visual Studio. Aktivera kryssarna på sidan Kodanalystillägg på projektets egenskapssidor. Tilläggen inkluderas sedan när du kör kodanalys. Mer information finns i Använda C++ Core Guidelines-kontroller.
Visual Studio 2017 version 15.3
- Stöd har lagts till för regler som rör resurshantering.
Visual Studio 2017 version 15.5
Nya C++ Core Guidelines-kontroller omfattar smart pekare korrekthet, korrekt användning av globala initierare och flaggning av användning av konstruktioner som
gotooch dåliga casts.Vissa varningsnummer som du kanske hittar i 15.3 är inte längre tillgängliga i 15.5. Dessa varningar ersattes med mer specifika kontroller.
Visual Studio 2017 version 15.6
- Stöd har lagts till för analys med en enda fil och förbättringar av analyskörningsprestanda. Mer information finns i C++ Static Analysis Improvements for Visual Studio 2017 15.6 Preview 2
Visual Studio 2017 version 15.7
- Stöd har lagts till för
/analyze:ruleset, vilket gör att du kan ange vilka kodanalysregler som ska köras. - Stöd har lagts till för fler C++Core Guidelines-regler. Mer information finns i Använda C++ Core Guidelines-kontroller.
Enhetstestning i Visual Studio 2017
Visual Studio 2017 version 15.5
Google Test Adapter och Boost.Test Adapter är nu tillgängliga som komponenter i skrivbordsutvecklingen med C++ -arbetsbelastning. De är integrerade med Test Explorer. CTest-stöd läggs till för CMake-projekt (med öppen mapp), även om fullständig integrering med Test Explorer inte är tillgänglig ännu. Mer information finns i Skriva enhetstester för C/C++.
Visual Studio 2017 version 15.6
- Stöd har lagts till för stöd för
Boost.Testdynamiskt bibliotek. - En
Boost.Testobjektmall är nu tillgänglig i IDE.
Mer information finns i Boost.Test Enhetstestning: Stöd för dynamiskt bibliotek och Mall för nytt objekt.
Visual Studio 2017 version 15.7
CodeLens-stöd har lagts till för C++-enhetstestprojekt. Mer information finns i Meddelande om CodeLens för C++-enhetstestning.
Visual Studio-grafikdiagnostik
Visual Studio-verktyg för grafikdiagnostik: Du kan använda dem för att registrera och analysera renderings- och prestandaproblem i Direct3D-appar. Använd dem i appar som körs lokalt på din Windows-dator, i en Windows-enhetsemulator eller på en fjärrdator eller enhet.
Indata och utdata för hörn- och geometriskuggningar: Möjligheten att visa indata och utdata från hörnskuggor och geometriskuggningar har varit en av de mest efterfrågade funktionerna. Det stöds nu i verktygen. Välj VS- eller GS-fasen i vyn Pipelinefaser för att börja inspektera indata och utdata i tabellen nedan.
Sök och filtrera i objekttabellen: Ger ett snabbt och enkelt sätt att hitta de resurser du letar efter.
Resurshistorik: Den här nya vyn ger ett effektivt sätt att se hela ändringshistoriken för en resurs som den användes under återgivningen av en infångad ram. Om du vill anropa historiken för en resurs klickar du på klockikonen bredvid valfri resurslänk.
Det visar det nya resurshistorikverktygets fönster, fyllt med resursens ändringshistorik.
Du kan avbilda bildrutor med full anropsstacken aktiverad. Det gör att du snabbt kan härleda kontexten för varje ändringshändelse och inspektera den i ditt Visual Studio-projekt. Ange alternativet för fullständig stackinsamling i dialogrutan Alternativ för Visual Studio-verktyg > under Grafikdiagnostik.
API-statistik: Visa en översikt över API-användning i din ram. Det är praktiskt att upptäcka samtal som du kanske inte inser att du gör alls, eller samtal som du gör för ofta. Det här fönstret är tillgängligt via Visa > API-statistik i Visual Studio Graphics Analyzer.
Minnesstatistik: Visa hur mycket minne drivrutinen allokerar för de resurser som du skapar i ramen. Det här fönstret är tillgängligt via Visa > minnesstatistik i Visual Studio Graphics Analyzer. Om du vill kopiera data till en CSV-fil för visning i ett kalkylblad högerklickar du och väljer Kopiera alla.
Bildrutevalidering: Den nya listan med fel och varningar är ett enkelt sätt att navigera i händelselistan baserat på potentiella problem som identifierats av Direct3D-felsökningsskiktet. Klicka på Visa > ramverifiering i Visual Studio Graphics Analyzer för att öppna fönstret. Klicka sedan på Kör validering för att starta analysen. Det kan ta flera minuter att slutföra, beroende på ramens komplexitet.
Ramanalys för D3D12: Använd Ramanalys för att analysera anropsprestanda med riktade "what-if"-experiment. Växla till fliken Ramanalys och kör analys för att visa rapporten.
Förbättringar av GPU-användning: Öppna spårningar kan tas via Visual Studio GPU Usage Profiler med antingen GPUView eller WPA-verktyget (Windows Performance Analyzer) för mer detaljerad analys. Om du har installerat Windows Performance Toolkit finns det två hyperlänkar: en för WPA och en annan för GPUView längst ned till höger i sessionsöversikten.
Spårningar som du öppnar i GPUView via den här länken stöder synkroniserad VS- och GPUView-tidslinje zoomning och panorering. En kryssruta i VS styr om synkronisering är aktiverad eller inte.