Cursos
Ruta de aprendizaje
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Este explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Actualmente, se sigue trabajando en la conformidad con los estándares del compilador de Microsoft C/C++ en Visual Studio (MSVC). Este es un resumen del estándar ISO del lenguaje C y C++ y la conformidad de la biblioteca de la versión de Visual Studio. El nombre de cada una de las características del compilador de C++ y de la biblioteca estándar tiene un vínculo al documento de propuesta del estándar ISO para C++ que describe la característica cuando hay alguno disponible en el momento de la publicación. La columna Compatible muestra la versión de Visual Studio en la que aparece por primera vez la compatibilidad de la característica.
Para más información sobre las mejoras de conformidad, vea Mejoras de conformidad de C++ en Visual Studio. Para obtener una lista de otros cambios, consulte Novedades de C++ en Visual Studio. Para conocer los cambios de conformidad en versiones anteriores, consulte Historial de cambios en Visual C++ 2003-2015 y Novedades de Visual C++ de 2003 a 2015. Para mantenerse al tanto de las noticias actuales del equipo de C++, visite el blog del equipo de C++.
Nota
No existen cambios importantes binarios entre Visual Studio 2015, 2017, 2019 y 2022. Para obtener más información, consulte Compatibilidad binaria de C++ entre versiones de Visual Studio.
Puede encontrar una lista más detallada de las características de la biblioteca estándar y las correcciones de errores por versión del producto en la página del registro de cambios de la wiki de STL de Microsoft en GitHub.
Un grupo de artículos enumerados juntos indica una característica estándar junto con una o varias mejoras o expansiones aprobadas. Estas características se implementan juntas.
Característica | Compatible |
---|---|
Características de la biblioteca estándar de C99 | Compatible |
Macros de ortografía alternativas <iso646.h> |
VS 2015 |
Compatibilidad con caracteres anchos <wchar.h> y <wctype.h> |
VS 2015 |
Compatibilidad compleja en <complex.h> |
Parcial en VS 2015 K |
Funciones matemáticas de tipo genérico <tgmath.h> |
VS 2019 16.8 2104 |
Características de punto flotante adicionales <float.h> |
VS 2015 |
Especificadores float printf hexadecimales %A , %a |
VS 2015 |
Tipos enteros extendidos <inttypes.h> , <stdint.h> |
VS 2015 |
vscanf Familia de en <stdio.h> y <wchar.h> |
VS 2015 |
Nuevas funciones matemáticas en <math.h> |
VS 2015 |
Tratamiento de las condiciones de error de la biblioteca matemática (math_errhandling ) |
VS 2015 |
Acceso al entorno de punto flotante <fenv.h> |
VS 2015 |
%lf Especificador de conversión para printf |
VS 2015 |
snprintf Familia de funciones en <stdio.h> |
VS 2015 |
boolean Tipo en <stdbool.h> |
VS 2015 |
va_copy Macro |
VS 2015 |
Especificadores de conversión strftime adicionales |
Parcial en VS 2015 L |
Características de la biblioteca estándar de C11 | Compatible |
Especificadores de alineación <stdalign.h> |
VS 2019 16.8 C11, 2104 |
aligned_alloc |
No M |
Sin especificadores de devolución <stdnoreturn.h> |
VS 2019 16.8 C11, 2104 |
Compatibilidad con subprocesamiento <threads.h> |
sí |
Compatibilidad con Atomic <stdatomic.h> |
experimental |
char16_t , char32_t <uchar.h> |
VS 2019 16.8 C11 |
se quitó gets() |
VS 2019 16.8 C11, N |
gets_s() |
VS 2019 16.8 C11 |
Interfaces de comprobación de límites (API *_s ) |
Parcial en VS 2015 C11, O |
fopen Opción "x" |
VS 2019 16.8 C11 |
Aserciones estáticas | VS 2019 16.8 C11, 2104 |
quick_exit |
VS 2019 16.8 C11 |
<complex.h> macros |
VS 2019 16.8 C11 |
Características de punto flotante <float.h> |
VS 2019 16.8 C11 |
Subprocesos C11 <threads.h> |
VS 2022 17.8 C11 |
No Todavía no se ha implementado.
Parcial La implementación está incompleta. Para más información, vea la sección Notas.
VS 2010 Compatible con Visual Studio 2010.
VS 2013 Compatible con Visual Studio 2013.
VS 2015 Compatible con Visual Studio 2015 (RTW).
VS 2015.2 y VS 2015.3 indican las características que se admiten en Visual Studio 2015 Update 2 y Visual Studio 2015 Update 3, respectivamente.
VS 2017 15.0 Compatible con Visual Studio 2017, versión 15.0 (RTW).
VS 2017 15.3 Compatible con Visual Studio 2017, versión 15.3.
VS 2017 15.5 Compatible con Visual Studio 2017, versión 15.5.
VS 2017 15.7 Compatible con Visual Studio 2017, versión 15.7.
VS 2019 16.0 Compatible con Visual Studio 2019, versión 16.0 (RTW).
VS 2019 16.1 Compatible con Visual Studio 2019, versión 16.1.
VS 2019 16.2 Compatible con Visual Studio 2019, versión 16.2.
VS 2019 16.3 Compatible con Visual Studio 2019, versión 16.3.
VS 2019 16.4 Compatible con Visual Studio 2019, versión 16.4.
VS 2019 16.5 Compatible con Visual Studio 2019, versión 16.5.
VS 2019 16.6 Compatible con Visual Studio 2019, versión 16.6.
VS 2019 16.7 Compatible con Visual Studio 2019, versión 16.7.
VS 2019 16.8 Compatible con Visual Studio 2019, versión 16.8.
VS 2019 16.9 Compatible con Visual Studio 2019, versión 16.9.
VS 2019 16.10 Compatible con Visual Studio 2019, versión 16.10.\
VS 2022 17.0 Compatible con Visual Studio 2022, versión 17.0.
VS 2022 17.1 Compatible con Visual Studio 2022, versión 17.1.
VS 2022 17.2 Compatible con Visual Studio 2022, versión 17.2.
VS 2022 17.3 Compatible con Visual Studio 2022, versión 17.3.
VS 2022 17.4 Compatible con Visual Studio 2022, versión 17.4.
VS 2022 17.5 Compatible con Visual Studio 2022, versión 17.5.
A En el modo /std:c++14
, las especificaciones de excepción dinámicas permanecen sin implementar y throw()
se sigue tratando como un sinónimo de __declspec(nothrow)
. En C++ 17, las especificaciones de excepción dinámicas se quitaron principalmente por P0003R5, excepto por un vestigio: throw()
está en desuso y se debe comportar como un sinónimo de noexcept
. En el modo /std:c++17
, MSVC ahora se ajusta al Estándar al otorgar a throw()
el mismo comportamiento que noexcept
, es decir, cumplimiento mediante la terminación.
La opción del compilador /Zc:noexceptTypes
solicita el comportamiento anterior de __declspec(nothrow)
. Es probable que throw()
se elimine en una versión futura de C++. Para ayudar a migrar el código en respuesta a estos cambios en el Estándar y la implementación de Microsoft, se agregaron advertencias del compilador nuevas para problemas de especificación de excepciones en /std:c++17
y /permissive-
.
B Se admite en el modo /permissive-
Visual Studio 2017, versión 15.7. Para obtener más información, vea Two-phase name lookup support comes to MSVC
.
C A partir de la versión 16.6 de Visual Studio 2019, el compilador implementa completamente el preprocesador C99 estándar a través de la opción /Zc:preprocessor
. (En las versiones de la 15.8 a la 16.5 de Visual Studio 2017, el compilador admite el preprocesador C99 estándar mediante la opción del compilador /experimental:preprocessor
). Esta opción está activada de forma predeterminada cuando se especifica la opción del compilador /std:c11
o /std:c17
.
G Compatible con /std:c++14
con una advertencia que se puede suprimir, C4984
.
E La implementación es suficiente para admitir la biblioteca del estándar C++20. Una implementación completa requiere un cambio importante del archivo binario.
F Características eliminadas cuando se especifica la opción /std:c++17
o posterior del compilador. Para volver a habilitar estas características, para facilitar la transición a los modos de lenguaje más recientes, use estas macros: _HAS_AUTO_PTR_ETC
, _HAS_FUNCTION_ALLOCATOR_SUPPORT
, _HAS_OLD_IOSTREAMS_MEMBERS
y _HAS_UNEXPECTED
.
G La biblioteca de algoritmos paralelos de ++17 está completa. Que esté completa no significa que todos los algoritmos se paralelicen en todos los casos. Los algoritmos más importantes se paralelizaron. Se proporcionan firmas de directiva de ejecución incluso cuando la implementación no paraleliza los algoritmos. El encabezado interno central, <yvals_core.h>
, contiene la sección "Notas de algoritmos paralelos" siguiente: C++ permite a una implementación implementar algoritmos paralelos como llamadas a los algoritmos de serie. Esta implementación paraleliza varias llamadas de algoritmo comunes, pero no todas.
Se paralelizan los algoritmos siguientes:
adjacent_difference
, adjacent_find
, , any_of
, count
stable_sort
find_if_not
for_each
find_if
inclusive_scan
for_each_n
reduce
partition
remove
none_of
mismatch
is_sorted_until
remove_if
is_sorted
is_partitioned
is_heap_until
replace
is_heap
find_first_of
replace_if
set_intersection
set_difference
sort
search_n
transform
transform_exclusive_scan
count_if
exclusive_scan
transform_inclusive_scan
equal
find
find_end
search
all_of
transform_reduce
Estos algoritmos no están paralelizados actualmente:
copy
, copy_n
, fill
, fill_n
, move
, reverse
, reverse_copy
, rotate
rotate_copy
shift_left
shift_right
swap_ranges
generate
, generate_n
partial_sort
, partial_sort_copy
copy_if
, includes
, inplace_merge
, lexicographical_compare
, , merge
max_element
min_element
minmax_element
nth_element
partition_copy
remove_copy
remove_copy_if
replace_copy
replace_copy_if
set_symmetric_difference
set_union
stable_partition
unique
unique_copy
H Esta es una implementación completamente nueva, incompatible con la versión anterior de std::experimental
, necesaria por la compatibilidad con symlink, las correcciones de errores y los cambios en el comportamiento requerido estándar. Actualmente, <filesystem>
proporciona tanto la versión nueva, std::filesystem
, como la anterior, std::experimental::filesystem
. El encabezado <experimental/filesystem>
proporciona solo la implementación experimental anterior. Espere que la implementación experimental se quite en la próxima versión sin ABI de las bibliotecas.
I Compatible con una función intrínseca de compilador.
J std::byte
se habilita mediante /std:c++17
o posterior, pero como en algunos casos puede entrar en conflicto con los encabezados de Windows SDK, tiene una macro de desactivación específica. Para deshabilitarlo, defina _HAS_STD_BYTE
como 0
.
K MSVC no admite la palabra clave _Complex
ni los tipos complejos nativos. El CRT universal <complex.h>
usa macros específicas de implementación para lograr el mismo efecto. Para más información, vea Compatibilidad con cálculos matemáticos complejos de C.
L El CRT universal no implementa los modificadores de conversión alternativos strftime
E
y O
. Estos modificadores se omiten (por ejemplo, %Oe
se comporta igual que %e
). Las API de configuración regional subyacentes no admiten los modificadores.
M El CTR universal no implementa C11, aligned_alloc
pero proporciona _aligned_malloc
y _aligned_free
. Dado que el sistema operativo Windows no admite asignaciones alineadas, es poco probable que se implemente esta función.
N La declaración se quita, pero la exportación de la función permanece por compatibilidad con versiones anteriores.
O Determinadas funciones de comprobación de límites no están implementadas, tienen firmas diferentes o no forman parte del estándar C11 o C17. Estas funciones no están implementadas: abort_handler_s
, ignore_handler_s
, memset_s
, set_constraint_handler_s
, snprintf_s
, snwprintf_s
, strerrorlen_s
y vsnwprintf_s
. Estas funciones tienen firmas diferentes: gmtime_s
, localtime_s
, qsort_s
, strtok_s
, vsnprintf_s
y wcstok_s
. Estas funciones no aparecen en el estándar: clearerr_s
y fread_s
.
P Se agregó compatibilidad en la versión 16.10 de Visual Studio 2019. Se agregó compatibilidad con Clang en la versión 17.0 de Visual Studio 2022.
Q Esto quita declare_reachable
, undeclare_reachable
, declare_no_pointers
, undeclare_no_pointers
y get_pointer_safety
. Anteriormente, estas funciones no tenían ningún efecto.
R Se trata de un cambio que afecta directamente al código fuente. Sin embargo, un código que antes no tenía un comportamiento definido en el tiempo de ejecución ahora se rechaza con errores del compilador.
S Se implementan adaptadores de intervalo de entrada y counted_iterator
en la versión 17.0 de VS 2022. Se planea una actualización futura a la versión 16.11 de Visual Studio 2019 para incorporar estos cambios.
T <stdatomic.h>
se admite actualmente al compilarse como C++ (/std:c++latest
). Todavía no se admite al compilarse como C ( /std:c11
y /std:c17
).
14 Estas características de C++17 y C++20 siempre están habilitadas, incluso cuando se especifica /std:c++14
(valor predeterminado). El motivo es que la característica se implementó antes de la introducción de las opciones /std
, o porque la implementación condicional era compleja de una manera no deseable.
17 Estas características se habilitan mediante la opción del compilador /std:c++17
o posterior.
20 En las versiones anteriores a la versión 16.10 de Visual Studio 2019, estas características se habilitan mediante la opción /std:c++latest
del compilador. En la versión 16.11 de Visual Studio 2019 se agregó la opción del compilador /std:c++20
para habilitar estas características.
20abi Debido al trabajo posterior al lanzamiento en curso en el estándar C++20, <format>
, tanto las partes de formato de <chrono>
(que se basan en <format>
) como las fábricas de intervalos y los adaptadores de intervalo de <ranges>
(todo lo que necesita el concepto view
) solo están disponibles en /std:c++latest
. Espere estas características en /std:c++20
después de llegar al acuerdo con WG21 de que no es necesario realizar ningún cambio importante en ABI. Las partes restantes de <chrono>
y los algoritmos que se aplican a los intervalos se habilitan en la opción del compilador /std:c++20
desde la versión 16.11 de Visual Studio 2019.
23 En Visual Studio 2022, versión 17.0 y posteriores, estas características se habilitan mediante la opción /std:c++latest
del compilador.
C11 La compatibilidad del compilador con C11 y C17 requiere la versión 16.8 o posterior de Visual Studio 2019. Excepto como se indicó, la compatibilidad con las bibliotecas de C11 y C17 requiere la compilación 10.0.20211.0 o posterior de Windows SDK. Para obtener más información sobre cómo instalar la compatibilidad con C11 y C17, vea Instalación de la compatibilidad con C11 y C17 en Visual Studio.
DR Estas características están habilitadas en todos los modos de opción /std
del compilador de C++. El comité de estándares de C++ adoptó este cambio como un informe de defectos retroactivo en C++11 y todas las versiones posteriores.
2104 La compatibilidad de la biblioteca de C11 con esta característica requiere la compilación 10.0.20348.0 (versión 2104) o posterior de Windows SDK.
Referencia del lenguaje C++
Biblioteca estándar de C++
Mejoras de conformidad de C++ en Visual Studio
Novedades de Visual C++ en Visual Studio
Historial de cambios de Visual C++ de 2003 a 2015
Novedades de Visual C++ de 2003 a 2015
Blog del equipo de C++
Cursos
Ruta de aprendizaje
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization
Documentación
Instalación de la compatibilidad con C11 y C17 en Visual Studio
Instalación de Windows SDK y compatibilidad de CRT con C11 y C17 en Visual Studio
Control de versiones del compilador de Microsoft Visual C++ (Visual C++)
Obtenga más información sobre el control de versiones del compilador de Microsoft Visual C++.
/std (Especificar la versión estándar del lenguaje)
La opción /std del compilador de MSVC especifica el estándar del lenguaje C o C++ admitido por el compilador.