Espacios de nombres
Variantes

C++23

De cppreference.com
< cpp

La revisión actual del estándar C++.

Nuevas características del lenguaje

void f(int& x)
{
if (x)
goto END;
x = 42;
END:
}
  • Declaraciones de alias (using) en las declaraciones de inicialización (P2360R0), p.ej.
for (using T = int; T e : v)
/* ... */

Nuevas características de la biblioteca

Nuevos módulos

Nuevos encabezados

Encabezados de compatibilidad de C:

Características de la biblioteca

Servicios generales
  • std::expected: un nuevo tipo vocabulario para devolver el resultado de una función (<expected>) (P0323R12, P2549R1).
  • std::move_only_function: un envoltorio invocable solo movible (P0288R9).
  • std::bind_back: un envoltorio de llamada (P2387R3).
  • std::byteswap: invierte los bytes (P1272R4).
  • std::forward_like (P2445R1).
  • std::invoke_r: invoca un objeto Callable (P2136R3).
  • std::to_underlying: una función de servicio para obtener el valor subyacente de enum (P1682R3).
  • std::unreachable: una función para marcar código inalcanzable (P0627R6).
  • Operaciones monádicas (transform, or_else, y and_then) para std::optional (P0798R8) y std::expected (P2505R5).
  • std::tuple es compatible con otros objetos similares a tuplas (P2165R4).
  • Agregar argumentos por defecto para el constructor de reenvío de std::pair (P2718R0).
  • Especialización de std::basic_common_reference para std::reference_wrapper que produce tipos referencia (P2655R3).
Biblioteca de Corrutinas
Diagnóstico
Algoritmos, iteradores y rangos
  • Nuevos adaptadores de rango:
  • ranges::range_adaptor_closure: un auxiliar para cierres de adaptadores de rango definidos por el programa (P2387R3).
  • ranges::to: una función de conversión de rango (P1206R7).
  • Nuevos algoritmos restringidos de rangos :
    • ranges::starts_with y ranges::ends_with (P1659R3).
    • ranges::contains y ranges::contains_subrange (P2302R4).
    • ranges::find_last, ranges::find_last_if, y ranges::find_last_if_not (P1223R5).
    • ranges::iota, ranges::shift_left, y ranges::shift_right: versiones de rangos de algoritmos no restringidos (P2440R1).
    • ranges::fold_left etc.: algoritmos de pliegue de rangos (P2322R6).
  • Rectificación de iteradores constantes, centinelas y rangos, es decir, ranges::cbegin y otros servicios similares que devuelven iteradores constantes deberían estar completamente garantizadas incluso para vistas superficiales-const (como std::span) (P2278R4).
  • Hacer explícitos los constructores de múltiples parámetros de algunas vistas (P2711R1).
  • Iteradores de rangos como entradas para algoritmos de no-rangos (P2408R5).
  • Relajación de adaptadores de rango para permitir tipos solo-movibles (P2494R2).
Contenedores
  • std::mdspan: una referencia de array multidimensional no dueña (P0009R18, P2599R2, P2604R0, P2613R1, P2763R1).
  • Constructibilidad y asignabilidad de contenedores a partir de otros rangos compatibles (P1206R7).
  • std::flat_set, std::flat_multiset (P1222R4), std::flat_map, std::flat_multimap (P0429R9): conjuntos y mapas planos - adaptadores de contenedor que envuelven contenedores subyacentes, ordenados, de acceso aleatorio.
  • Permitir la construcción de pares de iteradores en std::stack y std::queue (P1425R4).
  • Sobrecargas de borrado heterogéneo para contenedores asociativos (P2077R2).
  • Contexto de no deducción para asignadores en guías de deducción de contenedores (P1518R2).
  • Requerir que std::span y std::basic_string_view sean trivialmente copiables (P2251R1).
Apoyo en tiempo de compilación
Gestión de memoria
  • std::out_ptr y std::inout_ptr: adaptadores de punteros inteligentes para interoperabilidad con C (P1132R7).
  • std::allocate_at_least y std::allocator::allocate_at_least (P0401R6).
  • std::start_lifetime_as: una función de gestión explícita de tiempo de vida para tipos de tiempo de vida implícito (P2590R2).
  • Prohibición de la especialización de usuario de std::allocator_traits (P2652R2).
Procesamiento de cadenas y texto
  • Nuevas funciones miembro y cambios en los tipos de cadenas:
    • std::basic_string::contains y std::basic_string_view::contains (P1679R3).
    • Deshabilitar la construcción desde nullptr para std::basic_string y std::basic_string_view (P2166R1).
    • Constructor de rango explícito para std::basic_string_view (P1989R2).
    • std::basic_string::resize_and_overwrite (P1072R10).
    • Sobrecarga de referencia r-valor de std::basic_string::substr para un corte (splicing) eficiente (P2438R2).
  • Formateo de rangos, tuplas, presentación de secuencias de escape de caracteres y cadenas, std::thread::id, y seguimiento de pila. (P2286R8) (P2585R1) (P2693R1).
E/S e impresión
  • Funciones de salida formateada std::print y std::println proporcionadas en el encabezado <print> (P2093R14).
  • Biblioteca spanstream (flujo de cadena basado en std::span) proporcionada en el encabezado <spanstream> (P0448R4).
  • Apoyo del modo exclusivo en std::fstreams (P2467R1).
  • Apoyo para imprimir volatile T*: std::basic_ostream::operator<<(const volatile void*) (P1147R1).

Características obsoletas

Características eliminadas
  • Apoyo de recolección de basura y detección de fugas basada en alcanzabilidad. (P2186R2).
  • Apoyo de literales de cadena ancha mixtos concatenación, por ejemplo, const auto* no = u"q" U"p" es incorrecto. (P2201R1).
  • Literales de caracteres anchos no codificables y literales de caracteres anchos múltiples, por ejemplo, wchar_t x = 'db' es incorrecto. (P2362R3).
Características obsoletas
  • std::aligned_storage y std::aligned_union (P1413R3).
  • std::numeric_limits::has_denorm (P2614R2).
Deprecaciones revertidas
  • El operator, (operador coma) en expresiones de subíndice (pero la semántica ha cambiado para admitir subíndices multidimensionales sobrecargables operator[]).
  • Algunos encabezados de C (los encabezados correspondientes <*.h> para compatibilidad con C) (P2340R1).

Informes de defectos

Apoyo del compilador

Artículo principal: Apoyo de C++23 en compiladores.

Características principales del lenguaje C++23

Característica de C++23
 
Ponencia(s)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc
Sufijo de literal para size_t (con signo) P0330R8 11 13
Hacer () más opcional para lambdas P1102R2 11 13 6.3
if consteval P1938R3 12 14 6.3
Eliminar apoyo para recolección de basura P2186R2 12
ID: Sintaxis de identificador de C++ usando el estándar Unicode anexo 31 P1949R7 12 14
ID: Admitir atributos duplicados P2156R1 11 13
Conversiones contextuales estrechantes en static_assert y constexpr if P1401R5 9 13 (parcial)*
14
Recorte de espacios en blanco antes del empalme de línea P2223R2
Hacer obligatorio la distribución del orden de declaración P1847R4
Eliminar el modo mezclado de la concatenación de literales de cadena P2201R1
Deducir P0847R7 6.3
auto(x) y auto{x} P0849R8 12
Cambiar ámbito del tipo de retorno al final de las lambdas P2036R3
#elifdef y #elifndef P2334R1 12 13
Variables no literal (y etiquetas y gotos) en las funciones constexpr P2242R3 12 6.3
Codificación consistente de literales de carácter P2316R2
Juegos de caracteres y codificaciones P2314R4
Extender la instrucción de inicialización para admitir la declaración de alias P2360R0 12 14
Operador de índice/subíndice multidimensional P2128R6 12
Característica de C++23
 
Ponencia(s)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc

Características de la biblioteca de C++23

Característica de C++23
 
Ponencia(s)
 
GCC libstdc++
Clang libc++
MSVC
Biblioteca Estándar
Apple Clang
Sun/Oracle C++
Biblioteca Estándar
Embarcadero C++ Builder
Biblioteca Estándar
Cray C++
Biblioteca Estándar
Biblioteca de listado de pila P0881R7 P2301R1
<stdatomic.h> P0943R6 19.31*
std::is_scoped_enum P1048R1 11 12 19.30*
basic_string::contains(), basic_string_view::contains() P1679R3 11 12 19.30*
std::to_underlying P1682R3 11 13 19.30*
Relajar los requerimientos para std::chrono::time_point P2212R2 N/A N/A
ID: std::visit() para clases derivadas de std::variant P2162R2 12 13 19.20**
19.30*
ID: Rangos prestados condicionalmente P2017R1 11 19.30*
ID: Reparación de los adaptadores de rangos de entrada y std::counted_iterator P2259R1 12 19.30*(parcial)*
19.31*
Proporcionar retralimentación del tamaño en la interfaz de Allocator P0401R6 19.30*
<spanstream> : string-stream con un búfer basado en std::span P0448R4 12 19.31*
std::out_ptr(), std::inout_ptr() P1132R8 19.30*
constexpr type_info::operator==() P1328R1 12
Constructores con un par de iteradores para std::stack y std::queue P1425R4 12 14 19.31*
Contextos de no-deducción para asignadores de memoria en las guías de deducción de los contenedores P1518R2 13 19.31*
ranges::starts_with() y ranges::ends_with() P1659R3 12
Prohibición de la construcción de std::basic_string y std::basic_string_view a partir de nullptr P2166R1 12 13 19.30*
std::invoke_r() P2136R3 12 19.31*
Constructor de rango para std::basic_string_view P1989R2 11 14 19.30*
Argumentos de plantilla por defecto para el constructor de reenvío de pair P1951R1 12 14 19.30*
Eliminar recolección de basura y detección de fugas basada en alcance (apoyo de la biblioteca) P2186R2 12 14 19.30*
ID: join_view debería unir todas las vistas de los rangos P2328R1 11.2 19.30*
ID: view no requiere default_initializable P2325R3 12 19.30*
ID: Los objetos de adaptador de rango vinculan los argumentos por valor P2281R1 11 19.29 (16.10)*
(parcial)*
19.31*
ID: constexpr para std::optional y std::variant P2231R1 12 13 (parcial)* 19.31*
ID: Mejoras a std::format() P2216R3 14 (parcial)* 19.32*
ID: lazy_split_view y rediseño de split_view P2210R2 12 19.31*
zip P2321R2
Sobrecargas de borrado heterogéneo para contenedores asociativos P2077R3 19.32*
std::byteswap() P1272R4 12 14 19.31*
Imprimir volatile T* P1147R1 12 14 19.31*
basic_string::resize_and_overwrite() P1072R10 12 14 19.31*
Operaciones monádicas para std::optional P0798R8 12 14 19.32*
std::move_only_function P0288R9 12 19.32*
Añadir una especificación noexcept condicional a std::exchange P2401R0 12 14 19.25*
Requerir que span y basic_string_view sean TriviallyCopyable P2251R1
Clarificar el estado de los “encabezados de C” P2340R1
ID: Corregir ranges::istream_view P2432R1 12 19.31*
ID: Añadir apoyo para los tipos formateables no const a std::format P2418R2
ID: Qué es una vista (view) P2415R2 14 19.31*
ID: Corregir el manejo de la configuración regional en los formateadores de chrono P2372R3 19.31*
ID: Limpieza de los tipos enteros P2393R1
Característica de C++23
 
Ponencia(s)
 
GCC libstdc++
Clang libc++
MSVC
Biblioteca Estándar
Apple Clang
Sun/Oracle C++
Biblioteca Estándar
Embarcadero C++ Builder
Biblioteca Estándar
Cray C++
Biblioteca Estándar

* - planea sobre el número de versión para ver las notas

Enlaces externos

  C++23 - Wikipedia