Conformità al linguaggio Visual C++Visual C++ Language Conformance

Questo argomento riepiloga la conformità agli standard di linguaggio ISO C++03, C++11, C++14, C++17 e bozza C++20 delle funzionalità del compilatore e delle funzionalità della libreria standard per il compilatore C++ in Visual Studio 2017 e versioni precedenti.This topic summarizes the ISO C++03, C++11, C++14, C++17, and Draft C++20 language standards conformance of compiler features and Standard Library features for the C++ compiler in Visual Studio 2017 and earlier versions. Ogni nome di compilatore e di funzionalità della libreria standard è collegato al documento di proposta dello standard ISO C++ che descrive la funzionalità, se disponibile al momento della pubblicazione.Each compiler and standard library feature name links to the ISO C++ Standard proposal paper that describes the feature, if one is available at publication time. La colonna Supportato elenca la prima versione di Visual Studio in cui è apparso il supporto della funzionalità.The Supported column lists the Visual Studio version in which support for the feature first appeared.

Per informazioni sui miglioramenti della conformità e su altre modifiche in Visual Studio 2017, vedere Miglioramenti della conformità di C++ in Visual Studio 2017 e Novità di Visual C++ in Visual Studio 2017.For details on conformance improvements and other changes in Visual Studio 2017, see C++ conformance improvements in Visual Studio 2017 and What's New for Visual C++ in Visual Studio 2017. Per le modifiche della conformità nelle versioni precedenti, vedere Cronologia delle modifiche di Visual C++ e Visual C++: novità dalla versione 2003 alla 2015.For conformance changes in earlier versions, see Visual C++ change history and Visual C++ What's New 2003 through 2015. Per notizie aggiornate dal team di C++, visitare il blog del team di Visual C++.For current news from the C++ team, visit the Visual C++ team blog.

Nota

Non sono state apportate modifiche binarie di rilevo tra Visual Studio 2015 e Visual Studio 2017.There are no binary breaking changes between Visual Studio 2015 and Visual Studio 2017.

Funzionalità del compilatoreCompiler Features

Area funzionalitàFeature Area
Funzionalità del linguaggio di base C++03/11C++03/11 Core Language Features SupportatoSupported
  Tutti gli altri elementi  Everything else VS 2015 AVS 2015 A
  Ricerca del nome in due fasi  Two-phase name lookup VS 2017 15.7 BVS 2017 15.7 B
  N2634 Espressione SFINAE  N2634 Expression SFINAE VS 2017 15.7VS 2017 15.7
  N1653 Preprocessore C99  N1653 C99 preprocessor Parziale DPartial D
  N1988 Tipi integer estesi  N1988 Extended integer types N/D EN/A E
Funzionalità del linguaggio di base C++14C++14 Core Language Features SupportatoSupported
  N3323 Formulazione perfezionata per le conversioni contestuali  N3323 Tweaked wording for contextual conversions Visual Studio 2013VS 2013
  N3472 Valori letterali binari  N3472 Binary literals VS 2015VS 2015
  N3638 Tipi restituiti auto e decltype(auto)  N3638 auto and decltype(auto) return types VS 2015VS 2015
  N3648 init-captures  N3648 init-captures VS 2015VS 2015
  N3649 Espressioni lambda generiche  N3649 Generic lambdas VS 2015VS 2015
  N3760 Attributi [[deprecated]]  N3760 [[deprecated]] attribute VS 2015VS 2015
  N3778 Deallocazione dimensionata  N3778 Sized deallocation VS 2015VS 2015
  N3781 Separatori di cifre  N3781 Digit separators VS 2015VS 2015
  N3651 Modelli di variabile  N3651 Variable templates VS 2015.2VS 2015.2
  N3652 constexpr esteso  N3652 Extended constexpr VS 2017VS 2017
  N3653 NSDMI per le aggregazioni  N3653 NSDMIs for aggregates VS 2017VS 2017
  N3664 Possibilità di evitare/fondere allocazioni  N3664 Avoiding/fusing allocations N/D FN/A F
Funzionalità del linguaggio di base C++17C++17 Core Language Features SupportatoSupported
  N4086 Rimozione di trigrammi  N4086 Removing trigraphs VS 2010 14VS 2010 14
  N3922 Nuove regole per l'automazione con braced-init-list  N3922 New rules for auto with braced-init-lists VS 2015 14VS 2015 14
  N4051 typename in parametri di modello  N4051 typename in template template-parameters VS 2015 14VS 2015 14
  N4266 Attributi per spazi dei nomi ed enumeratori  N4266 Attributes for namespaces and enumerators VS 2015 14VS 2015 14
  N4267 Valori letterali carattere u8  N4267 u8 character literals VS 2015 14VS 2015 14
  N4230 Definizioni di spazi dei nomi annidati  N4230 Nested namespace definitions VS 2015.3 17VS 2015.3 17
  N3928 static_assert concisa  N3928 Terse static_assert VS 2017 17VS 2017 17
  P0184R0 Cicli for basati su intervallo generalizzati  P0184R0 Generalized range-based for-loops VS 2017 14VS 2017 14
  P0188R1 Attributo [[fallthrough]]  P0188R1 [[fallthrough]] attribute VS 2017 17VS 2017 17
  P0001R1 Rimozione della parola chiave register  P0001R1 Removing the register keyword VS 2017 15.3 17VS 2017 15.3 17
  P0002R1 Rimozione di operator++ per bool  P0002R1 Removing operator++ for bool VS 2017 15.3 17VS 2017 15.3 17
  P0018R3 Acquisizione *this per valore  P0018R3 Capturing *this by value VS 2017 15.3 17VS 2017 15.3 17
  P0028R4 Uso attributo namespaces senza ripetizione  P0028R4 Using attribute namespaces without repetition VS 2017 15.3 17VS 2017 15.3 17
  P0061R1 __has_include  P0061R1 __has_include VS 2017 15.3 14VS 2017 15.3 14
  P0138R2 direct-list-init delle enumerazioni fisse da numeri interi  P0138R2 Direct-list-init of fixed enums from integers VS 2017 15.3 17VS 2017 15.3 17
  P0170R1 Espressioni lambda constexpr  P0170R1 constexpr lambdas VS 2017 15.3 17VS 2017 15.3 17
  P0189R1 Attributo [[nodiscard]]  P0189R1 [[nodiscard]] attribute VS 2017 15.3 17VS 2017 15.3 17
  P0212R1 Attributo [[maybe_unused]]  P0212R1 [[maybe_unused]] attribute VS 2017 15.3 17VS 2017 15.3 17
  P0217R3 Associazioni strutturate  P0217R3 Structured bindings VS 2017 15.3 17VS 2017 15.3 17
  P0292R2 Istruzioni if di constexpr  P0292R2 constexpr if-statements VS 2017 15.3 GVS 2017 15.3 G
  P0305R1 Istruzioni di selezione con inizializzatori  P0305R1 Selection statements with initializers VS 2017 15.3 17VS 2017 15.3 17
  P0245R1 Valori letterali hexfloat  P0245R1 Hexfloat literals VS 2017 15.5 17VS 2017 15.5 17
  N4268 Possibilità di consentire più argomenti di modello non di tipo  N4268 Allowing more non-type template args VS 2017 15.5 17VS 2017 15.5 17
  N4295 Espressioni di riduzione  N4295 Fold expressions VS 2017 15.5 17VS 2017 15.5 17
  P0003R5 Rimozione di specifiche di eccezione dinamiche  P0003R5 Removing dynamic-exception-specifications VS 2017 15.5 17VS 2017 15.5 17
  P0012R1 Aggiunta di noexcept al sistema di tipi  P0012R1 Adding noexcept to the type system VS 2017 15.5 17VS 2017 15.5 17
  P0035R4 Allocazione di memoria dinamica con ulteriore allineamento  P0035R4 Over-aligned dynamic memory allocation VS 2017 15.5 17VS 2017 15.5 17
  P0386R2 Variabili inline  P0386R2 Inline variables VS 2017 15.5 17VS 2017 15.5 17
  P0522R0 Corrispondenza tra parametri di modello e argomenti compatibili  P0522R0 Matching template template-parameters to compatible arguments VS 2017 15.5 17VS 2017 15.5 17
  P0036R0 Rimozione di alcune riduzioni unarie  P0036R0 Removing some empty unary folds VS 2017 15.5 17VS 2017 15.5 17
  N4261 Correzione delle conversioni di qualificazione  N4261 Fixing qualification conversions VS 2017 15.7 17VS 2017 15.7 17
  P0017R1 Inizializzazione aggregata estesa  P0017R1 Extended aggregate initialization VS 2017 15.7 17VS 2017 15.7 17
   P0091R3 Deduzione dell'argomento del modello per modelli di classe  P0091R3 Template argument deduction for class templates
   P0512R0 Problemi di deduzione dell'argomento del modello di classe  P0512R0 Class template argument deduction issues
VS 2017 15.7 17VS 2017 15.7 17
  P0127R2 Dichiarazione di parametri di modello non di tipo con auto  P0127R2 Declaring non-type template parameters with auto VS 2017 15.7 17VS 2017 15.7 17
  P0135R1 Elisione copia garantita  P0135R1 Guaranteed copy elision VS 2017 15.6HVS 2017 15.6H
  P0136R1 Ridefinizione ereditarietà dei costruttori  P0136R1 Rewording inheriting constructors VS 2017 15.7 17VS 2017 15.7 17
  P0137R1 std::launder  P0137R1 std::launder VS 2017 15.7 17VS 2017 15.7 17
  P0145R3 Ridefinizione ordine di valutazione di espressioni  P0145R3 Refining expression evaluation order
  P0400R0 Ordine di valutazione degli argomenti della funzione  P0400R0 Order of evaluation of function arguments
VS 2017 15.7 17VS 2017 15.7 17
  P0195R2 Espansioni pack nelle dichiarazioni using  P0195R2 Pack expansions in using-declarations VS 2017 15.7 17VS 2017 15.7 17
  P0283R2 Attributi non riconosciuti ignorati  P0283R2 Ignoring unrecognized attributes VS 2015 14VS 2015 14
  P0702R1 Correzione della deduzione di argomenti del modello di classe per i costruttori di elenchi di inizializzatori  P0702R1 Fixing class template argument deduction for initializer-list ctors VS 2017 15.7 17VS 2017 15.7 17
Area funzionalitàFeature Area
Funzionalità del linguaggio di base ++17 (report sui difetti)C++17 Core Language Features (Defect Reports) SupportatoSupported
  P0702R1 Correzione della deduzione di argomenti del modello di classe per i costruttori di elenchi di inizializzatori  P0702R1 Fixing class template argument deduction for initializer-list ctors VS 2017 15.7 17VS 2017 15.7 17
  P0588R1: semplificare l'acquisizione implicita delle espressioni lambda  P0588R1 Simplifying implicit lambda capture NoNo
  CWG 1581: quando definire le funzioni membro constexpr  CWG 1581: When are constexpr member functions defined? NoNo
  P0962R1: rilasciare regole di individuazione del punto di personalizzazione per binding strutturati  P0962R1 Relaxing the structured bindings customization point finding rules NoNo
  P0962R2: rilasciare regole di individuazione del punto di personalizzazione per cicli range-for:  P0962R2 Relaxing the range-for loop customization point finding rules NoNo
  P0969R0: consentire binding strutturati a membri accessibili  P0969R0 Allowing structured bindings to accessible members NoNo
Area funzionalitàFeature Area
Funzionalità del linguaggio di base C++20C++20 Core Language Features SupportatoSupported
  P0306R4 Aggiunta di __VA_OPT__ per omissione della virgola ed eliminazione della virgola  P0306R4 Adding __VA_OPT__ for comma omission and comma deletion NoNo
  P0329R4 Inizializzazione designata  P0329R4 Designated initialization NoNo
  P0409R2 Acquisizione lambda consentita [=, this]  P0409R2 Allowing lambda-capture [=, this] NoNo
  P0428R2 Sintassi modello familiare per espressioni lambda generiche  P0428R2 Familiar template syntax for generic lambdas NoNo
  P0683R1 Inizializzatori del membro predefinito per campi bit  P0683R1 Default member initializers for bit-fields NoNo
  P0704R1 Correzione lvalue const per puntatori a membri con qualificatore ref  P0704R1 Fixing const lvalue ref-qualified pointers to members NoNo
  P0734R0 Concetti  P0734R0 Concepts NoNo

Funzionalità della libreria standardStandard Library Features

Area funzionalitàFeature Area
Funzionalità della libreria standard C++20C++20 Standard Library Features SupportatoSupported
   P0777R1: evitare il decadimento non necessario   P0777R1 Avoiding Unnecessary Decay VS 2017 15.7 14VS 2017 15.7 14
  P0463R1 endian  P0463R1 endian NoNo
  P0674R1 make_shared() per le matrici  P0674R1 make_shared() For Arrays NoNo
  P0858R0: requisiti di iteratore Constexpr  P0858R0 Constexpr Iterator Requirements VS 2017 15.3 17VS 2017 15.3 17
  P0809R0: confrontare contenitori non ordinati  P0809R0 Comparing Unordered Containers VS 2010 14VS 2010 14
   P0020R3 atomic<float>, atomic<double>, atomic<long double>   P0020R3 atomic<float>, atomic<double>, atomic<long double> NoNo
   P0053R7 <syncstream>   P0053R7 <syncstream>
   P0753R2: modifiche osyncstream   P0753R2 osyncstream Manipulators
NoNo
   P0122R7 <span>   P0122R7 <span> NoNo
   P0202R3 constexpr per <algorithm> e exchange()   P0202R3 constexpr For <algorithm> And exchange() NoNo
   P0355R7 <chrono> per calendari e fusi orario   P0355R7 <chrono> Calendars And Time Zones NoNo
   P0415R1 constexpr per <complex> (ripetizione)   P0415R1 constexpr For <complex> (Again) NoNo
   P0439R0 enum class memory_order   P0439R0 enum class memory_order NoNo
   P0457R2 starts_with()/ends_with() per basic_string/basic_string_view   P0457R2 starts_with()/ends_with() For basic_string/basic_string_view NoNo
   P0550R2 remove_cvref   P0550R2 remove_cvref NoNo
   P0551R3: modelli di funzione Thou Shalt Not Specialize std!   P0551R3 Thou Shalt Not Specialize std Function Templates! NoNo
   P0600R1 [[nodiscard]] per STL, parte 1   P0600R1 [[nodiscard]] For The STL, Part 1 NoNo
   P0616R0: usare move() in <numeric>   P0616R0 Using move() In <numeric> NoNo
   P0653R2 to_address()   P0653R2 to_address() NoNo
   P0718R2 atomic<shared_ptr<T>>, atomic<weak_ptr<T>>   P0718R2 atomic<shared_ptr<T>>, atomic<weak_ptr<T>> NoNo
   P0754R2 <version>   P0754R2 <version> NoNo
   P0767R1: deprecare is_pod   P0767R1 Deprecating is_pod NoNo
   P0768R1: supporto libreria per l'operatore di confronto Spaceship <=>   P0768R1 Library Support For The Spaceship Comparison Operator <=> NoNo
   P0966R1: non ridurre string::reserve()   P0966R1 string::reserve() Should Not Shrink NoNo
Funzionalità della libreria standard C++17C++17 Standard Library Features SupportatoSupported
  P0433R2 Integrazione della deduzione del modello per i modelli di classe nella libreria standard  P0433R2 Integrating template deduction for class templates into the standard library
  P0739R0 Miglioramento dell'integrazione della deduzione degli argomenti dei modelli di classe nella libreria standard  P0739R0 Improving class template argument deduction integration into the standard library
VS 2017 15.7VS 2017 15.7
  P0426R1 Constexpr per char_traits  P0426R1 constexpr For char_traits VS 2017 15.7VS 2017 15.7
  P0030R1 hypot (x, y, z)  P0030R1 hypot(x, y, z) VS 2017 15.7VS 2017 15.7
  P0220R1 Library Fundamentals V1  P0220R1 Library Fundamentals V1 VS 2017 15.6 JVS 2017 15.6 J
  P0067R5 Conversioni di stringhe elementari  P0067R5 Elementary String Conversions VS 2017 15.7 charconvVS 2017 15.7 charconv
  N4562 Nozioni fondamentali della libreria: <memory_resource >  N4562 Library Fundamentals: <memory_resource>
  P0337R0 Eliminazione assegnazione di polymorphic_allocator  P0337R0 Deleting polymorphic_allocator Assignment
VS 2017 15.6VS 2017 15.6
  P0024R2 Algoritmi paralleli  P0024R2 Parallel Algorithms
  P0336R1 Ridenominazione dei criteri di esecuzione parallela  P0336R1 Renaming Parallel Execution Policies
  P0394R4 Algoritmi paralleli devono avere terminate() per le eccezioni  P0394R4 Parallel Algorithms Should terminate() For Exceptions
  P0452R1 Unificazione degli algoritmi paralleli <numeric>  P0452R1 Unifying <numeric> Parallel Algorithms
VS 2017 15.7VS 2017 15.7
  P0226R1 Funzioni matematiche speciali  P0226R1 Mathematical Special Functions VS 2017 15.7VS 2017 15.7
  P0218R1 <filesystem >  P0218R1 <filesystem>
  P0219R1 Percorsi relativi per file system  P0219R1 Relative Paths For Filesystem
  P0317R1 Memorizzazione nella cache della voce di directory per file sytem  P0317R1 Directory Entry Caching For Filesystem
  P0392R0 Supporto string_view nei percorsi del file system  P0392R0 Supporting string_view In Filesystem Paths
  P0430R2 Supporto di file system diversi da POSIX  P0430R2 Supporting Non-POSIX Filesystems
  P0492R2 Risoluzione dei commenti NB per file system  P0492R2 Resolving NB Comments for Filesystem
VS 2017 15.7 KVS 2017 15.7 K
  P0003R5 Rimozione specifiche di eccezione dinamiche  P0003R5 Removing Dynamic Exception Specifications VS 2017 15.5 17VS 2017 15.5 17
  P0005R4 not_fn()  P0005R4 not_fn()
  P0358R1 Correzioni per not_fn()  P0358R1 Fixes For not_fn()
VS 2017 15.5 17VS 2017 15.5 17
  P0033R1 Ridefinizione di enable_shared_from_this  P0033R1 Rewording enable_shared_from_this VS 2017 15.5 14VS 2017 15.5 14
  P0083R3 Splicing mappe e set  P0083R3 Splicing Maps And Sets
  P0508R0 Chiarimento di insert_return_type  P0508R0 Clarifying insert_return_type
VS 2017 15.5 17VS 2017 15.5 17
  P0174R2 Deprecazione di parti superflue della libreria  P0174R2 Deprecating Vestigial Library Parts VS 2017 15.5 17VS 2017 15.5 17
  P0302R1 Rimozione supporto allocatore in std::function  P0302R1 Removing Allocator Support In std::function VS 2017 15.5 17VS 2017 15.5 17
  P0414R2 shared_ptr<T[]>, shared_ptr<T[N]>  P0414R2 shared_ptr<T[]>, shared_ptr<T[N]>
  P0497R0 Correzione shared_ptr per matrici  P0497R0 Fixing shared_ptr For Arrays
VS 2017 15.5 14VS 2017 15.5 14
  P0521R0 Deprecazione di shared_ptr::unique()  P0521R0 Deprecating shared_ptr::unique() VS 2017 15.5 17VS 2017 15.5 17
  P0607R0 Variabili inline per la libreria standard  P0607R0 Inline Variables for the Standard Library VS 2017 15.5 17VS 2017 15.5 17
  P0618R0 Deprecazione di <codecvt>  P0618R0 Deprecating <codecvt> VS 2017 15.5 17VS 2017 15.5 17
  N4562 Nozioni fondamentali della libreria: ricerca di Boyer-Moore()  N4562 Library Fundamentals: Boyer-Moore search()
  P0253R1 Correzione dei tipi restituiti dal servizio di ricerca  P0253R1 Fixing Searcher Return Types
VS 2017 15.3 17VS 2017 15.3 17
  P0031R0 constexpr per <array> (nuovamente) e <iterator>  P0031R0 constexpr For <array> (Again) And <iterator> VS 2017 15.3 17VS 2017 15.3 17
  P0040R3 Estensione degli strumenti di gestione della memoria  P0040R3 Extending Memory Management Tools VS 2017 15.3 17VS 2017 15.3 17
  P0084R2 Tipo restituito emplace  P0084R2 Emplace Return Type VS 2017 15.3 17VS 2017 15.3 17
  P0152R1 atomic::is_always_lock_free  P0152R1 atomic::is_always_lock_free VS 2017 15.3 17VS 2017 15.3 17
  P0154R1 hardware_destructive_interference_size e altre  P0154R1 hardware_destructive_interference_size, etc. VS 2017 15.3 17VS 2017 15.3 17
  P0156R2 Ridenominazione della funzione variadic lock_guard come scoped_lock  P0156R2 Renaming Variadic lock_guard to scoped_lock VS 2017 15.3 17VS 2017 15.3 17
  P0258R2 has_unique_object_representations  P0258R2 has_unique_object_representations VS 2017 15.3 LVS 2017 15.3 L
  P0295R0 gcd(), lcm()  P0295R0 gcd(), lcm() VS 2017 15.3 17VS 2017 15.3 17
  P0298R3 std::byte  P0298R3 std::byte VS 2017 15.3 17, byteVS 2017 15.3 17, byte
  P0403R1 UDL per <string_view> ("meow"sv e così via)  P0403R1 UDLs For <string_view> ("meow"sv, etc.) VS 2017 15.3 17VS 2017 15.3 17
  P0418R2 Requisiti per atomic compare_exchange memory_order  P0418R2 atomic compare_exchange memory_order Requirements VS 2017 15.3 14VS 2017 15.3 14
  P0435R1 Revisione di common_type  P0435R1 Overhauling common_type
  P0548R1 Adattamento di common_type e duration  P0548R1 Tweaking common_type and duration
VS 2017 15.3 14VS 2017 15.3 14
  P0505R0 constexpr per <chrono > (nuovamente)  P0505R0 constexpr For <chrono> (Again) VS 2017 15.3 17VS 2017 15.3 17
  P0513R0 Hash di poisoning  P0513R0 Poisoning hash
  P0599R1 Hash noexcept  P0599R1 noexcept hash
VS 2017 15.3 14VS 2017 15.3 14
  P0516R0 Contrassegno copia di shared_future come noexcept  P0516R0 Marking shared_future Copying As noexcept VS 2017 15.3 14VS 2017 15.3 14
  P0517R0 Costruzione di future_error da future_errc  P0517R0 Constructing future_error From future_errc VS 2017 15.3 14VS 2017 15.3 14
  P0558R1 Risoluzione delle incoerenze della classe di base con nome atomic  P0558R1 Resolving atomic Named Base Class Inconsistencies VS 2017 15.3 14VS 2017 15.3 14
  P0604R0 Modifica di is_callable/result_of in invoke_result, is_invocable, is_nothrow_invocable  P0604R0 Changing is_callable/result_of To invoke_result, is_invocable, is_nothrow_invocable VS 2017 15.3 17VS 2017 15.3 17
  N4562 Nozioni fondamentali della libreria: <algorithm> sample()  N4562 Library Fundamentals: <algorithm> sample() VS 2017VS 2017
  N4562 Nozioni fondamentali della libreria: <any>  N4562 Library Fundamentals: <any> VS 2017VS 2017
  N4562 Nozioni fondamentali della libreria: <optional>  N4562 Library Fundamentals: <optional> VS 2017VS 2017
  N4562 Nozioni fondamentali della libreria: <string_view>  N4562 Library Fundamentals: <string_view> VS 2017VS 2017
  N4562 Nozioni fondamentali della libreria: <tuple> apply()  N4562 Library Fundamentals: <tuple> apply() VS 2017VS 2017
  P0032R3 Interfaccia omogenea per variant/any/optional  P0032R3 Homogeneous Interface For variant/any/optional VS 2017VS 2017
  P0077R2 is_callable, is_nothrow_callable  P0077R2 is_callable, is_nothrow_callable VS 2017VS 2017
  P0088R3 <variant>  P0088R3 <variant> VS 2017VS 2017
  P0163R0 shared_ptr::weak_type  P0163R0 shared_ptr::weak_type VS 2017VS 2017
  P0209R2 make_from_tuple()  P0209R2 make_from_tuple() VS 2017VS 2017
  P0254R2 Integrazione di string_view e std::string  P0254R2 Integrating string_view And std::string VS 2017VS 2017
  P0307R2 Rendere nuovamente facoltativo maggiore o uguale  P0307R2 Making Optional Greater Equal Again VS 2017VS 2017
  P0393R3 Rendere maggiore o uguale come variante  P0393R3 Making Variant Greater Equal VS 2017VS 2017
  P0504R0 Revisione in_place_t/in_place_type_t<T>/in_place_index_t<I>  P0504R0 Revisiting in_place_t/in_place_type_t<T>/in_place_index_t<I> VS 2017VS 2017
  P0510R0 Rifiuto delle varianti di niente, matrici, riferimenti e tipi incompleti  P0510R0 Rejecting variants Of Nothing, Arrays, References, And Incomplete Types VS 2017VS 2017
  P0025R1 clamp()  P0025R1 clamp() VS 2015.3VS 2015.3
  P0185R1 is_swappable, is_nothrow_swappable  P0185R1 is_swappable, is_nothrow_swappable VS 2015.3VS 2015.3
  P0272R1 basic_string::data() non-const  P0272R1 Non-const basic_string::data() VS 2015.3VS 2015.3
  N4387 Ottimizzazione di pair e tuple  N4387 Improving pair And tuple VS 2015.2 14VS 2015.2 14
  N4508 shared_mutex (non temporizzata)  N4508 shared_mutex (Untimed) VS 2015.2 14VS 2015.2 14
  P0004R1 Rimozione di alias iostream deprecati  P0004R1 Removing Deprecated Iostreams Aliases VS 2015.2 remVS 2015.2 rem
  P0006R0 Modelli di variabile per tratti di tipo (is_same_v e altri)  P0006R0 Variable Templates For Type Traits (is_same_v, etc.) VS 2015.2 14VS 2015.2 14
  P0007R1 as_const()  P0007R1 as_const() VS 2015.2 14VS 2015.2 14
  P0013R1 Tratti di tipo operatore logico (conjunction e altri)  P0013R1 Logical Operator Type Traits (conjunction, etc.) VS 2015.2 14VS 2015.2 14
  P0074R0 owner_less<>  P0074R0 owner_less<> VS 2015.2 14VS 2015.2 14
  P0092R1 <chrono> floor(), ceil(), round(), abs()  P0092R1 <chrono> floor(), ceil(), round(), abs() VS 2015.2 14VS 2015.2 14
  P0156R0 Variadic lock_guard  P0156R0 Variadic lock_guard VS 2015.2 14VS 2015.2 14
  N3911 void_t  N3911 void_t VS 2015 14VS 2015 14
  N4089 Conversioni sicure in unique_ptr<T[]>  N4089 Safe Conversions In unique_ptr<T[]> VS 2015 14VS 2015 14
  N4169 invoke()  N4169 invoke() VS 2015 14VS 2015 14
  N4190 Rimozione auto_ptr, random_shuffle() ed elementi <functional> precedenti  N4190 Removing auto_ptr, random_shuffle(), And Old <functional> Stuff VS 2015 remVS 2015 rem
  N4258 Pulizia noexcept  N4258 noexcept Cleanups VS 2015 14VS 2015 14
  N4259 uncaught_exceptions()  N4259 uncaught_exceptions() VS 2015 14VS 2015 14
  N4277 reference_wrapper facilmente copiabile  N4277 Trivially Copyable reference_wrapper VS 2015 14VS 2015 14
  N4279 insert_or_assign()/try_emplace() per map/unordered_map  N4279 insert_or_assign()/try_emplace() For map/unordered_map VS 2015 14VS 2015 14
  N4280 size(), empty(), data()  N4280 size(), empty(), data() VS 2015 14VS 2015 14
  N4366 Assegnazione unique_ptr vincolata con precisione  N4366 Precisely Constraining unique_ptr Assignment VS 2015 14VS 2015 14
  N4389 bool_constant  N4389 bool_constant VS 2015 14VS 2015 14
  P0063R3 Libreria Standard C11  P0063R3 C11 Standard Library VS 2015 C11, 14VS 2015 C11, 14
  N4510 Supporto tipi incompleti in vector/list/forward_list  N4510 Supporting Incomplete Types In vector/list/forward_list VS 2013 14VS 2013 14
Funzionalità della libreria standard C++14C++14 Standard Library Features SupportatoSupported
  N3462 result_of adatto a SFINAE  N3462 SFINAE-Friendly result_of VS 2015.2VS 2015.2
  N3302 constexpr per <complex>  N3302 constexpr For <complex> VS 2015VS 2015
  N3469 constexpr per <chrono>  N3469 constexpr For <chrono> VS 2015VS 2015
  N3470 constexpr per <array>  N3470 constexpr For <array> VS 2015VS 2015
  N3471 constexpr per <initializer_list>, <tuple>, <utility>  N3471 constexpr For <initializer_list>, <tuple>, <utility> VS 2015VS 2015
  N3545 integral_constant::operator()()  N3545 integral_constant::operator()() VS 2015VS 2015
  N3642 UDL per <chrono>, <string> (1729ms, "meow"s e altri)  N3642 UDLs For <chrono>, <string> (1729ms, "meow"s, etc.) VS 2015VS 2015
  N3644 Iteratori in avanti Null  N3644 Null Forward Iterators VS 2015VS 2015
  N3654 quoted()  N3654 quoted() VS 2015VS 2015
  N3657 Ricerca eterogenea di associativi  N3657 Heterogeneous Associative Lookup VS 2015VS 2015
  N3658 integer_sequence  N3658 integer_sequence VS 2015VS 2015
  N3659 shared_mutex (temporizzata)  N3659 shared_mutex (Timed) VS 2015VS 2015
  N3668 exchange()  N3668 exchange() VS 2015VS 2015
  N3669 Correzione funzioni membro constexpr senza const  N3669 Fixing constexpr Member Functions Without const VS 2015VS 2015
  N3670 get<T>()  N3670 get<T>() VS 2015VS 2015
  N3671 equal(), is_permutation(), mismatch() a doppio intervallo  N3671 Dual-Range equal(), is_permutation(), mismatch() VS 2015VS 2015
  N3778 Deallocazione dimensionata  N3778 Sized Deallocation VS 2015VS 2015
  N3779 UDL per <complex> (3.14i e altri)  N3779 UDLs For <complex> (3.14i, etc.) VS 2015VS 2015
  N3789 constexpr per <functional>  N3789 constexpr For <functional> VS 2015VS 2015
  N3887 tuple_element_t  N3887 tuple_element_t VS 2015VS 2015
  N3891 Ridenominazione di shared_mutex (temporizzata) in shared_timed_mutex  N3891 Renaming shared_mutex (Timed) To shared_timed_mutex VS 2015VS 2015
  N3346 Requisiti minimi elemento contenitore  N3346 Minimal Container Element Requirements Visual Studio 2013VS 2013
  N3421 Funtori di operatori trasparenti (less<> e altri)  N3421 Transparent Operator Functors (less<>, etc.) Visual Studio 2013VS 2013
  N3655 Modelli di alias per <type_traits> (decay_t e altri)  N3655 Alias Templates For <type_traits> (decay_t, etc.) Visual Studio 2013VS 2013
  N3656 make_unique()  N3656 make_unique() Visual Studio 2013VS 2013
  N3924 Limitazione di rand()  N3924 Discouraging rand() N/DN/A

Un gruppo di documenti elencati insieme indica che una funzionalità è stata votata per l'aggiunta allo standard e che in seguito sono stati votati anche uno o più documenti per il miglioramento o l'espansione della funzionalità stessa.A group of papers listed together indicates that a feature was voted into the Standard, and then one or more papers to improve or expand that feature were also voted in. Queste funzionalità vengono implementate insieme.These features are implemented together.

Valori supportatiSupported values

No significa che la funzionalità non è ancora implementata.No means not yet implemented.
Parziale significa che l'implementazione in Visual Studio 2017 è incompleta.Partial means the implementation in Visual Studio 2017 is incomplete. Per altre informazioni, vedere la sezione Note.For more details, see the Notes section.
N/D significa che i documenti della proposta non descrivono le funzionalità.N/A means the proposal papers do not describe features. Questi documenti hanno modificato il linguaggio dello standard, ma non hanno creato lavoro per gli implementatori.These papers altered the language of the standard, but didn’t create any work for implementers. Sono riportati di seguito per motivi di completezza.They’re listed here for completeness.
VS 2010 indica le funzionalità supportate in Visual Studio 2010.VS 2010 indicates features that are supported in Visual Studio 2010.
VS 2013 indica le funzionalità supportate in Visual Studio 2013.VS 2013 indicates features that are supported in Visual Studio 2013.
VS 2015 indica le funzionalità supportate in Visual Studio 2015 RTM.VS 2015 indicates features that are supported in Visual Studio 2015 RTM.
VS 2015.2 e VS 2015.3 indicano le funzionalità supportate rispettivamente in Visual Studio 2015 Update 2 e Visual Studio 2015 Update 3.VS 2015.2 and VS 2015.3 indicate features that are supported in Visual Studio 2015 Update 2 and Visual Studio 2015 Update 3, respectively.
VS 2017 indica le funzionalità supportate in Visual Studio 2017 RTM.VS 2017 indicates features that are supported in Visual Studio 2017 RTM.
VS 2017 15.3 indica le funzionalità supportate in Visual Studio 2017 versione 15.3.VS 2017 15.3 indicates features that are supported in Visual Studio 2017 version 15.3.
VS 2017 15.5 indica le funzionalità supportate in Visual Studio 2017 versione 15.5.VS 2017 15.5 indicates features that are supported in Visual Studio 2017 version 15.5. VS 2017 15.7 indica le funzionalità supportate in Visual Studio 2017 versione 15.7.VS 2017 15.7 indicates features that are supported in Visual Studio 2017 version 15.7.

NoteNotes

A Nella modalità /std:c++14 le specifiche di eccezione dinamiche non vengono implementate e throw() viene ancora considerato come sinonimo di __declspec(nothrow).A In /std:c++14 mode, dynamic exception specifications remain unimplemented, and throw() is still treated as a synonym for __declspec(nothrow). In C++17 le specifiche di eccezione dinamiche sono state per lo più rimosse da P0003R5. Vestige: throw() viene deprecato e si comporta come sinonimo di noexcept.In C++17, dynamic exception specifications were mostly removed by P0003R5, leaving one vestige: throw() is deprecated and required to behave as a synonym for noexcept. Nella modalità /std:c + + 17 MSVC ora si conforma allo standard assegnando a throw() lo stesso comportamento di noexcept, vale a dire l'impostazione avviene tramite terminazione.In /std:c++17 mode, MSVC now conforms to the Standard by giving throw() the same behavior as noexcept, i.e. enforcement via termination. L'opzione del compilatore /Zc:noexceptTypes- richiede il comportamento precedente di __declspec(nothrow).The compiler option /Zc:noexceptTypes- requests our old behavior of __declspec(nothrow). Throw() sarà probabilmente rimosso in C++20.It’s likely that throw() will be removed in C++20. Per agevolare la migrazione del codice in risposta a queste modifiche nello standard e nell'implementazione Microsoft, sono stati aggiunti nuovi avvisi del compilatore per problemi relativi alle specifiche di eccezione in /std:c++17 e /permissive-.To help with migrating code in response to these changes in the Standard and our implementation, new compiler warnings for exception specification issues have been added under /std:c++17 and /permissive-.
B Supporto nella modalità /permissive- in Visual Studio 2017 versione 15.7.B Supported in /permissive- mode in Visual Studio 2017 version 15.7. Vedere Two-phase name lookup support comes to MSVC (Nuovo supporto per la ricerca nome in due fasi in MSV) per altre informazioni.See Two-phase name lookup support comes to MSVC for more information.
C Il supporto del compilatore per l'espressione SFINAE è sufficiente per la libreria standard a partire da Visual Studio 2015 Update 2.C The compiler’s support for Expression SFINAE has been sufficient for the Standard Library since Visual Studio 2015 Update 2. È supportata in Visual Studio 2017 15.7 indipendentemente che la modalità whether /permissive sia impostata.Supported in Visual Studio 2017 15.7 regardless of whether /permissive- mode is set. Alcuni bug devono ancora essere corretti.Some bugs remain to be fixed. La soluzione alternativa "tipo di tag univoco" non è più necessaria ed è stata rimossa dall'implementazione STL.The “unique tag type” workaround is no longer necessary, and we’ve removed this workaround from our STL implementation.
D Il supporto del compilatore per le regole del preprocessore C99 è incompleto in Visual Studio 2017.D The compiler’s support for C99 Preprocessor rules is incomplete in Visual Studio 2017. Le macro variadic sono supportate, ma sono presenti molti bug nel comportamento del preprocessore.Variadic macros are supported, but there are many bugs in the preprocessor’s behavior. Il preprocessore è in fase di revisione. In via sperimentale, le modifiche saranno inserite presto nella modalità /permissive-.We are overhauling the preprocessor, and will experimentally ship those changes under the /permissive- mode soon.
E Contrassegnato come non applicabile perché i compilatori sono consentiti, ma non necessari, per supportare i tipi integer estesi.E This is marked as Not Applicable because compilers are permitted, but not required, to support extended integer types. Come GCC e Clang, Microsoft ha scelto di non supportarli.Like GCC and Clang, we’ve chosen not to support them.
F Analogamente, questo elemento è contrassegnato come non applicabile perché i compilatori sono consentiti, ma non richiesti, per implementare questa ottimizzazione.F Similarly, this is marked as Not Applicable because compilers are permitted, but not required, to implement this optimization.
G Supporto disponibile in /std:c + + 14 con un messaggio di avviso che può essere rimosso.G Supported under /std:c++14 with a suppressible warning.
J Le funzionalità che non sono state completate in Visual Studio 2015 sono descritte in dettaglio altrove in questa tabella.J Features that were not completed in Visual Studio 2015 are broken out elsewhere in this table.
K Si tratta di un'implementazione completamente nuova, non compatibile con la versione precedente std::experimental, che richiedeva supporto per symlink, correzioni di bug e modifiche nel comportamento richiesto dallo standard.K This is a completely new implementation, incompatible with the previous std::experimental version, necessitated by symlink support, bug fixes, and changes in standard-required behavior. Attualmente, con <filesystem > sono inclusi il nuovo std::filesystem e il precedente std::experimental::filesystem. Con <experimental/filesystem> è inclusa solo la precedente implementazione sperimentale.Currently, including <filesystem> provides the new std::filesystem and the previous std::experimental::filesystem, and including <experimental/filesystem> provides only the old experimental implementation. L'implementazione sperimentale sarà RIMOSSA nella prossima versione delle librerie con modifiche di rilievo per l'ABI.The experimental implementation will be REMOVED in the next ABI-breaking release of the libraries.
L Funzionalità supportata da una funzione intrinseca del compilatore.L Supported by a compiler intrinsic.
14 Queste funzionalità C++ 17/20 sono sempre abilitate, anche quando si specifica /std:c + + 14 (impostazione predefinita).14 These C++17/20 features are always enabled, even when /std:c++14 (the default) is specified. Il motivo è che la funzionalità è stata implementata prima dell'introduzione delle opzioni /std oppure a causa dell'imprevista complessità dell'implementazione condizionale.This is either because the feature was implemented before the introduction of the /std options, or because conditional implementation was undesirably complex.
17 Queste funzionalità sono abilitate da /std:c++17 (o dall'opzione del compilatore /std:c++latest).17 These features are enabled by the /std:c++17 (or /std:c++latest) compiler option.
byte std::byte è abilitato da /std:c++17 (o /std:c++latest), ma poiché è in conflitto con le intestazioni di Windows SDK in alcuni casi, dispone di una macro dettagliata per il rifiuto esplicito.byte std::byte is enabled by /std:c++17 (or /std:c++latest), but because it can conflict with the Windows SDK headers in some cases, it has a fine-grained opt-out macro. Può essere disabilitato definendo _HAS_STD_BYTE come 0.It can be disabled by defining _HAS_STD_BYTE as 0.
C11 La libreria CRT universale ha implementato le parti della libreria standard C11 richieste da C++ 17, fatta eccezione per gli identificatori di conversione alternativa E/O strftime() C99, fopen() in modalità esclusiva C11 e aligned_alloc() C11.C11 The Universal CRT implemented the parts of the C11 Standard Library that are required by C++17, with the exception of C99 strftime() E/O alternative conversion specifiers, C11 fopen() exclusive mode, and C11 aligned_alloc(). L'implementazione di quest'ultimo è improbabile, perché C11 specificava aligned_alloc() in un modo non compatibile con l'implementazione Microsoft di free(). In particolare free() deve essere in grado di gestire allocazioni notevolmente allineate.The latter is unlikely to be implemented, because C11 specified aligned_alloc() in a way that's incompatible with the Microsoft implementation of free(), namely, that free() must be able to handle highly aligned allocations.
rem Funzionalità rimosse quando si specifica l'opzione del compilatore /std:c++17 (o /std:c++latest).rem Features removed when the /std:c++17 (or /std:c++latest) compiler option is specified. Per queste funzionalità sono disponibili macro per il rifiuto esplicito: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERS e _HAS_UNEXPECTED.These features have opt-out macros: _HAS_AUTO_PTR_ETC, _HAS_FUNCTION_ALLOCATOR_SUPPORT, _HAS_OLD_IOSTREAMS_MEMBERS, and _HAS_UNEXPECTED.
charconv from_chars() e to_chars() sono disponibili per numeri interi.charconv from_chars() and to_chars() are available for integers. Attualmente si sta lavorando sul virgola mobile from_chars(), affinché sia seguito dal virgola mobile to_chars().We’re currently working on floating-point from_chars(), to be followed by floating-point to_chars().
parallel La libreria degli algoritmi paralleli di C++17 è completa.parallel C++17’s parallel algorithms library is complete. Ciò non significa tuttavia che vengono parallelizzati sempre tutti gli algoritmi. Sono stati parallelizzati gli algoritmi più importanti e le firme dei criteri di esecuzione sono disponibili anche quando gli algoritmi non sono parallelizzati.Note that this doesn’t mean every algorithm is parallelized in every case; the most important algorithms have been parallelized and execution policy signatures are provided even where algorithms are not parallelized. L'intestazione interna centrale dell'implementazione STL (yvals.h) contiene le "note sugli algoritmi paralleli" seguenti: C++ consente a un'implementazione di implementare gli algoritmi paralleli come chiamate agli algoritmi seriali.Our STL implementation’s central internal header, yvals.h, contains the following “Parallel Algorithms Notes”: C++ allows an implementation to implement parallel algorithms as calls to the serial algorithms. Con questa implementazione è possibile eseguire la parallelizzazione di diverse chiamate di algoritmi comuni, ma non di tutti.This implementation parallelizes several common algorithm calls, but not all.

Vengono parallelizzati gli algoritmi seguenti:The following algorithms are parallelized:

  • adjacent_difference, adjacent_find, all_of, any_of, count, count_if, equal, exclusive_scan, find, find_end, find_first_of, find_if, for_each, for_each_n, inclusive_scan, mismatch, none_of, reduce, remove, remove_if, search, search_n, sort, stable_sort, transform, transform_exclusive_scan, transform_inclusive_scan, transform_reduce.adjacent_difference, adjacent_find, all_of, any_of, count, count_if, equal, exclusive_scan, find, find_end, find_first_of, find_if, for_each, for_each_n, inclusive_scan, mismatch, none_of, reduce, remove, remove_if, search, search_n, sort, stable_sort, transform, transform_exclusive_scan, transform_inclusive_scan, transform_reduce.

Di seguito sono specificati gli algoritmi che attualmente non vengono parallelizzati:The following are not presently parallelized:

  • Non esiste un apparente miglioramento delle prestazioni del parallelismo su hardware di destinazione. Tutti gli algoritmi che semplicemente copiano o permutano gli elementi senza diramazioni evidenziano solitamente limiti in termini di larghezza di banda della memoria:No apparent parallelism performance improvement on target hardware; all algorithms which merely copy or permute elements with no branches are typically memory bandwidth limited:
    • copy, copy_backward, copy_n, fill, fill_n, move, move_backward, remove, remove_if, replace, replace_if, reverse, reverse_copy, rotate, rotate_copy, swap_rangescopy, copy_backward, copy_n, fill, fill_n, move, move_backward, remove, remove_if, replace, replace_if, reverse, reverse_copy, rotate, rotate_copy, swap_ranges
  • Esiste confusione sui requisiti di parallelismo utente, probabilmente anche nella categoria precedente:Confusion over user parallelism requirements exists; likely in the above category anyway:
    • generate, generate_ngenerate, generate_n
  • Parallelismo efficace che si ritiene irrealizzabile:Effective parallelism suspected to be infeasible:
    • partial_sort, partial_sort_copypartial_sort, partial_sort_copy
  • Non ancora valutato. Il parallelismo potrà essere implementato in una versione futura e rivelarsi utile:Not yet evaluated; parallelism may be implemented in a future release and is suspected to be beneficial:
    • copy_if, includes, inplace_merge, is_heap, is_heap_until, is_partitioned, is_sorted, is_sorted_until, lexicographical_compare, max_element, merge, min_element, minmax_element, nth_element, partition_copy, remove_copy, remove_copy_if, replace_copy, replace_copy_if, set_difference, set_intersection, set_symmetric_difference, set_union, stable_partition, unique, unique_copycopy_if, includes, inplace_merge, is_heap, is_heap_until, is_partitioned, is_sorted, is_sorted_until, lexicographical_compare, max_element, merge, min_element, minmax_element, nth_element, partition_copy, remove_copy, remove_copy_if, replace_copy, replace_copy_if, set_difference, set_intersection, set_symmetric_difference, set_union, stable_partition, unique, unique_copy

Vedere ancheSee also

Riferimenti al linguaggio C++C++ Language Reference
Libreria standard C++C++ Standard Library
Miglioramenti della conformità in Visual Studio 2017C++ conformance improvements in Visual Studio 2017
Novità di Visual C++ in Visual Studio 2017What's New for Visual C++ in Visual Studio 2017
Cronologia delle modifiche di Visual C++ dal 2003 al 2015Visual C++ change history 2003 through 2015
Visual C++: novità dalla versione 2003 alla 2015Visual C++ What's New 2003 through 2015
Blog del team di Visual C++Visual C++ team blog