Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Standaardenconformance voor de Microsoft C/C++-compiler in Visual Studio (MSVC) is een werk dat wordt uitgevoerd. Hier volgt een samenvatting van de ISO Standard C- en C++-taal- en bibliotheekconformantie door de Visual Studio-versie. Elke C++-compiler en standaardbibliotheekfunctienaam heeft een koppeling naar het ISO Standard C++-voorsteldocument waarin de functie wordt beschreven, wanneer deze beschikbaar is tijdens de publicatie. De kolom Ondersteund bevat de Visual Studio-versie waarin ondersteuning voor de functie voor het eerst werd weergegeven.
Zie C ++ conformanceverbeteringen in Visual Studio voor meer informatie over verbeteringen in de conformiteit. Zie Wat is er nieuw voor Microsoft C++ in Visual Studio voor een lijst met andere wijzigingen. Zie Visual C++ wijzigingsgeschiedenis en Visual C++ Wat is er nieuw 2003 tot en met 2015 voor wijzigingen in de conformiteit in eerdere versies. Ga naar de C++-teamblog voor actueel nieuws van het C++-team.
Note
Er zijn geen binaire doorbrekende veranderingen tussen Visual Studio 2015, 2017, 2019 en 2022. Zie C++ binaire compatibiliteit tussen Visual Studio-versies voor meer informatie
C++ compilerfuncties
C++ Standaardbibliotheekfuncties
Een gedetailleerdere lijst met standaardbibliotheekfuncties en bugfixes per productversie is beschikbaar op de Pagina Changelog van De Microsoft STL-wiki van GitHub .
Zie voor de meest recente informatie over doorlopende nalevingswerkzaamheden:
Een groep documenten die samen worden vermeld, geeft een standaardfunctie aan, samen met een of meer goedgekeurde verbeteringen of uitbreidingen. Deze functies worden samen geïmplementeerd.
C Standard-bibliotheekkenmerken
| Feature | Supported |
|---|---|
| C99 Standard-bibliotheekfuncties | Supported |
Alternatieve spellingmacros <iso646.h> |
Visual Studio 2015 |
Brede tekenondersteuning <wchar.h> en <wctype.h> |
Visual Studio 2015 |
Complexe ondersteuning in <complex.h> |
Gedeeltelijk in VS 2015 K |
Algemene wiskundige functies typen <tgmath.h> |
VS 2019 16.8 2104 |
Aanvullende zwevendekommakenmerken <float.h> |
Visual Studio 2015 |
Hexadecimale float printf aanduidingen %A, %a |
Visual Studio 2015 |
Uitgebreide gehele getaltypes <inttypes.h>, <stdint.h> |
Visual Studio 2015 |
vscanf familie in <stdio.h> en <wchar.h> |
Visual Studio 2015 |
Nieuwe wiskundige functies in <math.h> |
Visual Studio 2015 |
Behandeling van wiskundige bibliotheekfoutvoorwaarden (math_errhandling) |
Visual Studio 2015 |
Toegang tot de zwevendekomma-omgeving <fenv.h> |
Visual Studio 2015 |
%lf conversieaanduiding voor printf |
Visual Studio 2015 |
snprintf familie van functies in <stdio.h> |
Visual Studio 2015 |
boolean intypen <stdbool.h> |
Visual Studio 2015 |
va_copy macro |
Visual Studio 2015 |
Aanvullende strftime conversieaanduidingen |
Gedeeltelijk in VS 2015 L |
| C11 Standaardbibliotheekkenmerken | Supported |
Uitlijningsaanduidingen <stdalign.h> |
VS 2019 16.8 C11, 2104 |
aligned_alloc |
Geen M |
Geen retouraanduidingen <stdnoreturn.h> |
VS 2019 16.8 C11, 2104 |
Ondersteuning voor threading <threads.h> |
yes |
Atomic-ondersteuning <stdatomic.h> |
experimental |
char16_t, char32_t<uchar.h> |
VS 2019 16.8 C11 |
gets() Verwijderd |
VS 2019 16.8 C11, N |
gets_s() |
VS 2019 16.8 C11 |
Interfaces voor het controleren van grenzen (*_s API's) |
Gedeeltelijk in Visual Studio 2015 C11, O |
fopen
"x" optie |
VS 2019 16.8 C11 |
| Statische asserties | VS 2019 16.8 C11, 2104 |
quick_exit |
VS 2019 16.8 C11 |
<complex.h> Macro 's |
VS 2019 16.8 C11 |
drijvende-komma kenmerken <float.h> |
VS 2019 16.8 C11 |
C11-threads <threads.h> |
VS 2022 17.8 C11 |
Ondersteunde waarden
Nee Nog niet geïmplementeerd.
Gedeeltelijk De implementatie is onvolledig. Zie de sectie Notities voor meer informatie.
VS 2010 Ondersteund in Visual Studio 2010.
VS 2013 Ondersteund in Visual Studio 2013.
VS 2015 Ondersteund in Visual Studio 2015 (RTW).
VS 2015.2 en VS 2015.3 geven respectievelijk functies aan die worden ondersteund in Visual Studio 2015 Update 2 en Visual Studio 2015 Update 3.
VS 2017 15.0 Ondersteund in Visual Studio 2017 versie 15.0 (RTW).
VS 2017 15.3 Ondersteund in Visual Studio 2017 versie 15.3.
VS 2017 15.5 Ondersteund in Visual Studio 2017 versie 15.5.
VS 2017 15.7 Ondersteund in Visual Studio 2017 versie 15.7.
VS 2019 16.0 Ondersteund in Visual Studio 2019 versie 16.0 (RTW).
VS 2019 16.1 Ondersteund in Visual Studio 2019 versie 16.1.
VS 2019 16.2 Ondersteund in Visual Studio 2019 versie 16.2.
VS 2019 16.3 Ondersteund in Visual Studio 2019 versie 16.3.
VS 2019 16.4 Ondersteund in Visual Studio 2019 versie 16.4.
VS 2019 16.5 Ondersteund in Visual Studio 2019 versie 16.5.
VS 2019 16.6 Ondersteund in Visual Studio 2019 versie 16.6.
VS 2019 16.7 Ondersteund in Visual Studio 2019 versie 16.7.
VS 2019 16.8 Ondersteund in Visual Studio 2019 versie 16.8.
VS 2019 16.9 Ondersteund in Visual Studio 2019 versie 16.9.
VS 2019 16.10 Ondersteund in Visual Studio 2019 versie 16.10.
VS 2022 17.0 Ondersteund in Visual Studio 2022 versie 17.0.
VS 2022 17.1 Ondersteund in Visual Studio 2022 versie 17.1.
VS 2022 17.2 Ondersteund in Visual Studio 2022 versie 17.2.
VS 2022 17.3 Ondersteund in Visual Studio 2022 versie 17.3.
VS 2022 17.4 Ondersteund in Visual Studio 2022 versie 17.4.
VS 2022 17.5 Ondersteund in Visual Studio 2022 versie 17.5.
MSVC Build Tools versie 14.50 Ondersteund in Visual Studio 2026 18.0 (MSVC-compiler versie 19.50) en hoger.
Notes
In/std:c++14-modus laat de compiler dynamische uitzonderingsspecificaties ongeïmplementeerd en behandelt throw() als synoniem voor __declspec(nothrow). In C++17 zijn door P0003R5 de meeste dynamische uitzonderingsspecificaties verwijderd, met uitzondering van één overblijfsel: de standaard heeft throw() verouderd verklaard en vereist dat het zich gedraagt als synoniem voor noexcept. In /std:c++17 modus voldoet MSVC nu aan de standaard door throw() hetzelfde gedrag als noexcept te geven, namelijk afdwingen via beëindiging.
De compileroptie /Zc:noexceptTypes vraagt het oude gedrag van __declspec(nothrow). Het is waarschijnlijk dat throw() deze wordt verwijderd in een toekomstige versie van C++. Om te helpen bij het migreren van code als reactie op deze wijzigingen in de Standard en de Microsoft-implementatie, worden nieuwe compilerwaarschuwingen voor problemen met uitzonderingsspecificaties toegevoegd onder /std:c++17 en /permissive-.
B Ondersteund in /permissive--modus in Visual Studio 2017 versie 15.7. Zie Two-phase name lookup support comes to MSVC voor meer informatie.
C In Visual Studio 2019 versie 16.6 en latere versies implementeert de compiler de standaard C99-preprocessor volledig via de /Zc:preprocessor optie. (In Visual Studio 2017 versie 15.8 tot en met 16.5 ondersteunt de compiler de standaard C99-preprocessor via de /experimental:preprocessor compileroptie.) Deze optie is standaard ingeschakeld wanneer de compileroptie /std:c11 of /std:c17 is opgegeven.
D Ondersteund onder /std:c++14 met een onderdrukbare waarschuwing, C4984.
E De implementatie is voldoende om de C++20 Standard-bibliotheek te ondersteunen. Voor een volledige implementatie is een binaire doorbrekende wijziging vereist.
F-functies die zijn verwijderd wanneer de /std:c++17 of latere compileroptie is opgegeven. Als u deze functies opnieuw wilt inschakelen (om de overgang naar nieuwere taalmodi te vereenvoudigen), gebruikt u deze macro's: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERSen _HAS_UNEXPECTED.
De bibliotheek met parallelle algoritmen van G++17 is voltooid. Voltooid betekent niet dat elk algoritme in elk geval wordt geparallelliseerd. De belangrijkste algoritmen worden geparallelliseerd. Handtekeningen voor uitvoeringsbeleid worden geleverd, zelfs wanneer de implementatie geen algoritmen parallelliseert. De centrale interne header, <yvals_core.h>bevat de volgende 'Notities bij parallelle algoritmen': met C++ kan een implementatie parallelle algoritmen implementeren als aanroepen naar de seriële algoritmen. Deze implementatie parallelliseert verschillende veelgebruikte algoritme-aanroepen, maar niet alle.
De volgende algoritmen worden parallelliseerd:
-
adjacent_differenceadjacent_findall_ofany_ofcountcount_ifequalexclusive_scanfindfind_endfind_first_offind_iffind_if_notfor_eachfor_each_ninclusive_scanis_heapis_heap_untilis_partitionedis_sortedis_sorted_untilmismatchnone_ofpartitionreduceremoveremove_ifreplacereplace_ifsearchsearch_nset_differenceset_intersectionsortstable_sorttransformtransform_exclusive_scantransform_inclusive_scantransform_reduce
Deze algoritmen worden momenteel niet geparallelliseerd:
- Deze algoritmen tonen geen merkbare prestatieverbetering voor parallelle uitvoering op doelhardware. Alle algoritmen die slechts elementen kopiëren of permuteren zonder vertakkingen, zijn doorgaans beperkt tot geheugenbandbreedte:
-
copy, , ,copy_n, ,fill,fill_n,move,reversereverse_copy,rotaterotate_copyshift_leftshift_rightswap_ranges
-
- Verwarring over de vereisten voor gebruikersparallelisme bestaat voor deze algoritmen, die waarschijnlijk toch in de bovenstaande categorie voorkomen:
-
generate,generate_n
-
- Effectieve parallelle uitvoering van deze algoritmen is mogelijk onfeilbaar:
-
partial_sort,partial_sort_copy
-
- Deze algoritmen worden nog niet geëvalueerd. De bibliotheek kan parallellisme implementeren in een toekomstige release:
-
copy_ifincludesinplace_mergelexicographical_comparemax_elementmergemin_elementminmax_elementnth_elementpartition_copyremove_copyremove_copy_ifreplace_copyreplace_copy_ifset_symmetric_differenceset_unionstable_partitionuniqueunique_copy
-
H Dit is een geheel nieuwe implementatie, niet compatibel met de vorige std::experimental versie, die nodig is door symlink-ondersteuning, bugfixes en wijzigingen in standaardgedrag.
<filesystem> Biedt momenteel zowel de nieuwe std::filesystem als de vorigestd::experimental::filesystem. De <experimental/filesystem> header biedt alleen de oude experimentele implementatie. Verwacht verwijdering van de experimentele implementatie in de volgende ABI-onderbrekende release van de bibliotheken.
Ik word ondersteund door een intrinsieke functie van de compiler.
Jstd::byte wordt ingeschakeld door /std:c++17 of later, maar omdat het in sommige gevallen conflicteert met de Windows SDK-headers, heeft het een uitgebreide uitschakelmacro. Als u het wilt uitschakelen, definieert u _HAS_STD_BYTE als 0.
K MSVC biedt geen ondersteuning voor het _Complex trefwoord of systeemeigen complexe typen. De universele CRT <complex.h> maakt gebruik van implementatiespecifieke macro's om hetzelfde effect te bereiken. Zie C complexe wiskundige ondersteuning voor meer informatie.
L De universele CRT implementeert strftimeE de en O alternatieve conversieaanpassingen niet. Deze modifiers worden genegeerd (bijvoorbeeld %Oe gedraagt zich hetzelfde als %e). De onderliggende landinstellingen-API's bieden geen ondersteuning voor de modifiers.
M The Universal CRT implementeert geen C11 aligned_alloc, maar levert _aligned_malloc en _aligned_free. Omdat het Windows-besturingssysteem geen ondersteuning biedt voor uitgelijnde toewijzingen, is deze functie waarschijnlijk niet geïmplementeerd.
N De declaratie wordt verwijderd, maar de export voor de functie blijft voor achterwaartse compatibiliteit.
O Bepaalde functies voor het controleren van grenzen zijn niet geïmplementeerd of hebben verschillende handtekeningen, of maken geen deel uit van de C11- of C17-standaard. Deze functies zijn niet geïmplementeerd: abort_handler_s, ignore_handler_s, memset_s, set_constraint_handler_s, snprintf_s, , snwprintf_s, . strerrorlen_svsnwprintf_s Deze functies hebben verschillende handtekeningen: gmtime_s, localtime_s, qsort_s, strtok_s, , vsnprintf_s, . wcstok_s Deze functies worden niet weergegeven in de standaard: clearerr_s, fread_s.
P-ondersteuning is toegevoegd in Visual Studio 2019 versie 16.10. Ondersteuning voor Clang is toegevoegd in Visual Studio 2022 versie 17.0.
V Hiermee verwijdert u declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Voorheen hadden deze functies geen effect.
R Dit is een veelvoorkomende wijziging die fouten in de bron aanbrengt . Code die eerder niet-gedefinieerd gedrag tijdens runtime had, wordt nu echter geweigerd met compilerfouten.
S Input Range-adapters en counted_iterator zijn geïmplementeerd in VS 2022 17.0. Een toekomstige update van Visual Studio 2019 versie 16.11 is gepland om deze wijzigingen op te nemen.
T<stdatomic.h> wordt momenteel ondersteund wanneer deze is gecompileerd als C++ (/std:c++latest). Het wordt nog niet ondersteund wanneer deze is gecompileerd als C (/std:c11 en /std:c17)
U Uitgebreide drijvendekommatypen zijn een optionele C++23-functie. Deze functie wordt pas geïmplementeerd als de C++23-standaardisatie is voltooid.
V Gebruik de compileropties /source-charset:utf-8 en /we4828 om bronbestanden te behandelen als UTF-8 gecodeerd.
14 Deze C++17- en C++20-functies zijn altijd ingeschakeld, zelfs wanneer /std:c++14 (de standaardinstelling) is opgegeven. De reden hiervoor is dat de functie vóór de introductie van de /std opties is geïmplementeerd of omdat voorwaardelijke implementatie onherstelbaar complex was.
17 Deze functies zijn ingeschakeld door de /std:c++17 of latere compileroptie.
20 In versies via Visual Studio 2019 versie 16.10 zijn deze functies ingeschakeld door de /std:c++latest compileroptie. Visual Studio 2019 versie 16.11 heeft de /std:c++20 compileroptie toegevoegd om deze functies in te schakelen.
20abi Vanwege doorlopend werk na de release op de C++20-standaard, zijn de opmaakonderdelen van <format> (die afhankelijk zijn van <chrono>) en de range factory's en range-adaptors van <format> (alles wat het <ranges> concept nodig heeft) alleen beschikbaar onder view. **
Verwacht deze functies onder /std:c++20 zodra er overeenstemming is bereikt met WG21 dat er geen verdere wijzigingen nodig zijn die de ABI verbreken. De resterende onderdelen van <chrono> en de algoritmen die van toepassing zijn op bereiken, worden ingeschakeld met de compileroptie /std:c++20 in Visual Studio 2019 versie 16.11 en latere versies.
23 In Visual Studio 2022 versie 17.0 en hoger worden deze functies ingeschakeld door de /std:c++latest compileroptie.
24 In MSVC Build Tools versie 14.50 en hoger (voor het eerst geleverd met Visual Studio 2026 versie 18.0), worden deze functies ingeschakeld door de /std:c++latest compileroptie.
C11 Voor compilerondersteuning voor C11 en C17 is Visual Studio 2019 versie 16.8 of hoger vereist. Behalve zoals vermeld, vereist C11- en C17-bibliotheekondersteuning Windows SDK build 10.0.20211.0 of hoger. Zie C11- en C17-ondersteuning installeren in Visual Studio voor meer informatie over het installeren van ondersteuning voor C11 en C17.
DR Deze functies zijn ingeschakeld in alle C++ /std -compileroptiemodi. De C++ Standaardcommissie heeft deze wijziging als een terugwerkend defectrapport in C++11 en alle latere versies aangenomen.
2104 C11-bibliotheekondersteuning voor deze functie vereist Windows SDK build 10.0.20348.0 (versie 2104) of hoger.
Zie ook
Naslaginformatie over C++-taal
C++ Standaardbibliotheek
verbeteringen van de C++-conformiteit in Visual Studio
Wat is er nieuw voor Microsoft C++ in Visual Studio
Visual C++ wijzigingsgeschiedenis 2003 tot en met 2015
Visual C++ Wat is er nieuw 2003 tot en met 2015
C++ teamblog