C++11
C++11 es la segunda versión principal de C++ y la actualización más importante desde C++98. Se introdujeron un gran número de cambios tanto para estandarizar prácticas existentes como para mejorar las abstracciones disponibles para los programadores de C++.
Antes de que fuera finalmente aprobado por la ISO el 12 de agosto de 2011, se utilizó el nombre 'C++0x' porque se esperaba que se publicara antes de 2010. Pasaron 8 años entre C++03 y C++11, por lo que se ha convertido en el intervalo más largo entre versiones hasta ahora. Desde entonces, actualmente, C++ se actualiza cada 3 años regularmente.
| Esta sección está incompleta |
Las siguientes características se fusionaron en C++11:
- De TR1: todo TR1 excepto Funciones Especiales.
- De Boost: La biblioteca de hilos, exception_ptr, error_code y error_condition, mejoras de iteradores (begin, end, next, prev)
- De C: Funciones de conversión Unicode al estilo C
Características del lenguaje central
- auto y decltype
- defaulted y deleted funciones
- final y override
- tipo de retorno final
- referencias a rvalue
- constructores de movimiento y operadores de asignación de movimiento
- enumeraciones con ámbito
- constexpr y tipos literales
- inicialización de listas
- delegación y herencia de constructores
- inicializadores llave-o-igual
- nullptr
- long long
char16_tychar32_t- alias de tipo
- plantillas variádicas
- uniones generalizadas (no triviales)
- PODs generalizados (tipos triviales y tipos de diseño estándar)
- literales de cadena Unicode
- literales definidos por el usuario
- atributos
- expresiones lambda
- especificador noexcept y operador noexcept
- alignof y alignas
- modelo de memoria
- almacenamiento local de hilo
- interfaz de recolección de basura (eliminado en C++23)
- range-
for(basado en la biblioteca Boost) - static_assert (basado en la biblioteca Boost)
| Esta sección está incompleta |
Características de la biblioteca
Encabezados
- <array>
- <atomic>
- <cfenv>
- <chrono>
- <cinttypes>
- <condition_variable>
- <cstdint>
- <cuchar>
- <forward_list>
- <future>
- <initializer_list>
- <mutex>
- <random>
- <ratio>
- <regex>
- <scoped_allocator>
- <system_error>
- <thread>
- <tuple>
- <typeindex>
- <type_traits>
- <unordered_map>
- <unordered_set>
Características de la biblioteca
- biblioteca de soporte de concurrencia
emplace()y otros usos de referencias a rvalue en todas las partes de la biblioteca existente- std::unique_ptr
- std::move_iterator
- std::initializer_list
- asignadores con estado y con ámbito
- std::forward_list
- biblioteca chrono
- biblioteca ratio
- nuevos algoritmos:
- std::all_of, std::any_of, std::none_of,
- std::find_if_not,
- std::copy_if, std::copy_n,
- std::move, std::move_backward,
- std::random_shuffle, std::shuffle,
- std::is_partitioned, std::partition_copy, std::partition_point,
- std::is_sorted, std::is_sorted_until,
- std::is_heap, std::is_heap_until,
- std::minmax, std::minmax_element,
- std::is_permutation,
- std::iota,
- std::uninitialized_copy_n
- Facetas de conversión Unicode
- std::function
- std::exception_ptr
- std::error_code y std::error_condition
- mejoras de iteradores
- :
- std::begin
- std::end
- std::next
| Funciones de conversión Unicode |
Esta sección está incompleta
Soporte de compiladores
Características del lenguaje central de C++11
| Característica de C++11 |
Documento(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
Embarcadero C++ Builder |
IBM Open XL C++ for AIX |
IBM Open XL C++ for z/OS |
IBM XL C++ |
Sun/Oracle C++ |
HP aCC |
Digital Mars C++ |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Preprocesador C99 | N1653 | 4.3 | Sí | 19.0 (2015)* (parcial)* 19.26* |
Sí | 4.1 | 11.1 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 10.1 | 5.9 | A.06.25 | Sí | |
| static_assert (FTM)* | N1720 | 4.3 | 2.9 | 16.0* | Sí | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | 8.52 | |
| Corchetes angulares derechos | N1757 | 4.3 | Sí | 14.0* | Sí | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Declaraciones friend extendidas | N1791 | 4.7 | 2.9 | 16.0* | Sí | 4.1 | 11.1 (parcial) 12.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
long long
|
N1811 | Sí | Sí | 14.0* | Sí | Sí | Sí | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | Sí | Sí | Sí | Sí | |
| auto | N1984 | 4.4 | Sí | 16.0* | Sí | 3.9 | 11.0 (parcial)* 12.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| Constructores delegados (FTM)* | N1986 | 4.7 | 3.0 | 18.0* | Sí | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
extern template
|
N1987 | 3.3 | Sí | 12.0* | Sí | 3.9 | 9.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| constexpr (FTM)* | N2235 | 4.6 | 3.1 | 19.0 (2015)* | Sí | 4.6 | 13.0 (parcial) 14.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 (parcial) 13.1 |
5.13 | A.06.28 | ||
char16_t y char32_t (FTM)*
|
N2249 | 4.4 | 2.9 | 19.0 (2015)* | Sí | 4.4 | 12.1 (parcial)* 14.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | 8.52 | |
| Soporte de compilador para type traits. N2255* | N2255 N2984 N3142 |
4.3 (parcial)* 4.8 (parcial)* 5 |
3.0 | 14.0* (parcial)* 19.0 (2015)* |
Sí | 4.0 | 10.0 | 2015 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.3 | 5.13 | 6.16 | |||
| Alias de plantilla (FTM)* | N2258 | 4.7 | 3.0 | 18.0* | Sí | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
| alignas | N2341 | 4.8 | 3.0 | 19.0 (2015)* | Sí | 4.8 | 15.0 | 2015 | 7.0 | 8.6 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | Sí | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| Funciones defaulted y deleted | N2346 | 4.4 | 3.0 | 18.0* | Sí | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.25 | ||
Enumeraciones enum
|
fuertemente tipadas | N2347 | 4.4 | 2.9
16.0* (parcial) |
17.0* | Sí | 4.0 | 13.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 | 5.13 | ||
| A.06.25 | Operaciones atómicas | N2427 | 4.4 | 3.1 | 17.0* | Sí | Sí | 13.0 | 2015 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | ||||
| 5.14 | nullptr | N2431 | 4.6 | 2.9 | 16.0* | Sí | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.27 | |
| 8.52 Operadores de | conversión explícitos | N2437 | 4.5 | 3.0 | 18.0* | Sí | 4.4 | 13.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 | 5.13 | ||
| A.06.27 ref-qualifiers (FTM) | * | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | Sí | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | ||
| A.06.28 Literales de cadena Unicode (FTM) | * | N2442 | 4.4 | 3.0 | 19.0 (2015)* | Sí | 4.7 | 11.0* | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0
10.1* |
13.1.1* | 5.7 | A.06.28 | |
| 8.52 Literales de cadena cruda (FTM) | * | N2442 | 4.5 | Sí | 18.0* | Sí | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1, excepto AIX xlC 13.1.3* | 5.13 | A.06.28 | |
| 8.52 | Espacios de nombres inline | N2535 | 4.4 | 2.9 | 19.0 (2015)* | Sí | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 | 5.13 | ||
| A.06.28 Constructores heredados (FTM) | * | N2540 | 4.8 | 3.3 | 19.0 (2015)* | Sí | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1* | |||
| 5.13 | Tipos de retorno de función finales | N2541 | 4.4 | 2.9 | 16.0* | Sí | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 | 5.13 | ||
| A.06.27 Uniones sin restricciones | N2544 | 4.6 | 3.0 | 19.0 (2015)* | Sí | 4.6 | 14.0* | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Plantillas variádicas (FTM)* | N2242 N2555 |
4.3 (parcial)* 4.4 |
2.9 | 18.0* | Sí | 4.3 (parcial)* 4.3 |
12.1 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 (parcial)* | 5.13 | A.06.27 | ||
| Expresión SFINAE | N2634 | 4.4 | 2.9 | 19.14* | Sí | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | |||||
| Tipos locales y anónimos como parámetros de plantilla | N2657 | 4.5 | 2.9 | 16.0* | Sí | 4.2 | 12.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.27 | ||
| Almacenamiento local de hilo | N2659 | 4.4 (parcial) 4.8 |
3.3* | 16.0* (parcial) 19.0 (2015)* |
Sí | 4.8 | 11.1 (parcial) 15.0* |
2015 | 8.4 | Sí | 17.1.0 | 1.1.0 | 10.1 (parcial)* 13.1.2 (parcial)* |
5.9 (parcial) | 8.52 (parcial) | |||
| Inicialización dinámica y destrucción con concurrencia (statics mágicos) (FTM)* | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Sí | Sí | 11.1* | 2015 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | |||
| Recolección de Basura y Detección de Fugas Basada en Accesibilidad | N2670 | |||||||||||||||||
| Listas de inicializadores (FTM)* | N2672 | 4.4 | 3.1 | 18.0* | Sí | 4.5 | 13.0 (parcial) 14.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Inicializadores de miembros de datos no estáticos (FTM)* | N2756 | 4.7 | 3.0 | 18.0* | Sí | 4.6 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
Atributos, [[noreturn]] (FTM)*
|
N2761 | 4.8 | 3.3 | 19.0 (2015)* | Sí | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
[[carries_dependency]]
|
N2556 N2643 |
3.3* | 17.1.0* | |||||||||||||||
Declaraciones enumadelantadas (opacas)
|
N2764 | 4.6 | 3.1 | 17.0* | Sí | 4.5 | 11.1 (parcial) 14.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Literales definidos por el usuario (FTM)* | N2765 | 4.7 | 3.1 | 19.0 (2015)* | Sí | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |||
| Referencias a rvalue (FTM)* | N2118 N2844 CWG1138 |
4.3 (parcial)* 4.5 |
2.9 | 16.0* (parcial)* 17.0* |
Sí | 4.5 | 11.1 (parcial)* 12.0 (parcial)* 14.0 |
2015 | 7.0* | 8.4 | Sí | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| Expresiones lambda (FTM)* | N2550 N2658 N2927 |
4.5 | 3.1 | 16.0* (parcial)* 17.0* |
Sí | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | ||
| Bucle for basado en rango (FTM)* | N2930 N3271 |
4.6 | 3.0 | 17.0* | Sí | 4.5 | 13.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| noexcept | N3050 | 4.6 | 3.0 | 19.0 (2015)* | Sí | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.28 | ||
| Funciones miembro especiales de movimiento predeterminadas | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Sí | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 5.13 | A.06.25 | |||
| override y final | N2928 N3206 N3272 |
4.7 | 2.9 | 14.0* (parcial) 17.0* |
Sí | 4.8 | 12.0 (parcial)* 14.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| decltype (FTM)* | N2343 N3276 |
4.3 (parcial)* 4.8.1 |
2.9 | 16.0* (parcial)* 17.0* |
Sí | 4.2 (parcial)* 4.8 |
11.0 (parcial)* 12.0 |
2015 | 7.0 | 8.4 | Sí | 17.1.0 | 1.1.0 | 11.1 (parcial)* | 5.13 | A.06.25 | 8.52 (parcial)* | |
| Característica de C++11 |
Documento(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
Embarcadero C++ Builder |
IBM Open XL C++ for AIX |
IBM Open XL C++ for z/OS |
IBM XL C++ |
Sun/Oracle C++ |
HP aCC |
Digital Mars C++ |
Características de la biblioteca de C++11
| Característica de C++11 |
Documento(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
|
|---|---|---|---|---|---|---|---|---|---|
| Biblioteca de expresiones regulares | N1429 | 4.9 | 2.8 | Sí | Sí | 17.1.0 | |||
| Type traits. N1836* | N1836 N2240 N2244 N2255 N2342 N2984 N3142 |
4.3 (parcial)* 4.8 (parcial)* 5 |
3.0 | 14.0* (parcial)* 19.0 (2015)* |
Sí | 17.1.0 | 5.13 | Sí | |
Funciones miembro cbegin, cend, crbegin y crend de contenedores
|
N1913 LWG1192 |
4.3 (parcial)* 4.5 |
Sí* | 16.0* | Sí* | 17.1.0 | |||
| Recolección de Basura y Detección de Fugas Basada en Accesibilidad (soporte de biblioteca) | N2670 | 6 (sin operación)* |
3.4 (sin operación)* |
19.0 (2015)* (sin operación)* |
Sí (sin operación)* |
17.1.0 | |||
| Manipuladores de E/S de dinero, tiempo y hexfloat | N2071 N2072 |
5 | 3.8 | 19.0 (2015)* | Sí | 17.1.0 | 5.15 | ||
| Prohibición de COW (copia en escritura) std::basic_string | N2668 | 5 | Sí | Sí | Sí | 17.1.0 | Sí | ||
| Característica de C++11 |
Documento(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
* - pase el mouse sobre una celda marcada con la estrella * para ver notas emergentes adicionales.
DRnn - el número nn después de "DR" indica la revisión de C++ objetivo a la que se aplica el Informe de Defectos, por ejemplo, DR20 → C++20.
Enlaces externos
| 1. | C++11 - Wikipedia |
| 2. | Ejemplos funcionales de C++11 |