Asignaciones estructuradas e if-init en C++17
Desestructure tuplas y pares con asignaciones estructuradas y use sentencias if-init.
Asignaciones estructuradas e if-init en C++17 es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.
Desestructuración en C++ moderno
C++17 añadió los bindings estructurados, una forma clara de desempaquetar tuplas, pares, arrays y agregados en variables con nombre individuales.
La forma básica
Use auto [a, b, ...] para declarar variables vinculadas a las partes del valor situado a la derecha.
std::pair<std::string, int> p = {"Ada", 30};
auto [name, age] = p;
std::cout << name << " is " << age;Vincular una iteración de un mapa
La mejora más clara se aprecia al recorrer mapas. Ya no necesita it.first ni it.second.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << " " << age << "\n";
}Vinculaciones por referencia
Use auto& para vincular por referencia. Modificar los nombres vinculados cambia el objeto subyacente.
std::pair<int, int> p = {1, 2};
auto& [a, b] = p;
a = 99;
std::cout << p.first; // 99Vinculaciones const
Use const auto& para desestructurar en modo de solo lectura sin copiar.
for (const auto& [key, value] : map) {
// read only
}Vincular arrays y tuplas
Funciona con cualquier tipo compatible con la interfaz similar a una tupla, incluidos los arrays de C y std::tuple.
int arr[3] = {1, 2, 3};
auto [x, y, z] = arr;
std::tuple<int, std::string, double> t = {1, "hi", 3.14};
auto [a, s, d] = t;Vincular estructuras simples
Puede desestructurar cualquier estructura cuyos miembros sean públicos. Los nombres se infieren según el orden de declaración.
struct Point { int x; int y; };
Point pt{3, 4};
auto [x, y] = pt;
std::cout << x << ", " << y;Sentencias if-init
C++17 también añadió sentencias de inicialización para if y switch. Declare una variable temporal dentro de la cabecera; su ámbito es el cuerpo de la sentencia if o switch.
if (auto it = map.find("Ada"); it != map.end()) {
std::cout << it->second;
} else {
std::cout << "not found";
}Combinar ambas características
Los bindings y las sentencias if-init funcionan conjuntamente para crear código elegante.
if (auto [it, inserted] = m.insert({"key", 42}); inserted) {
std::cout << "added";
} else {
std::cout << "already present";
}Duración de las vinculaciones
Las vinculaciones hacen referencia a subobjetos de una variable anónima subyacente. Viven hasta el final del ámbito que las contiene, con la misma duración que una variable local normal.
Cuándo NO usar bindings
Si el nombre de un miembro aporta un significado que se perdería con el nombre de la vinculación, prefiera el acceso explícito al miembro. La legibilidad es más importante que la brevedad.
Comprobación rápida
¿Qué característica de C++17 le permite recorrer un std::map con las partes con nombre de cada par?
Repaso
Los bindings estructurados desestructuran pares, tuplas, arrays y estructuras en variables con nombre. Combinados con las sentencias if-init de C++17, hacen mucho más claro el código de recorrido y búsqueda.
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 51
- Lecciones
- 203
Preguntas frecuentes
¿La lección «Asignaciones estructuradas e if-init en C++17» es gratis?
Sí — el texto completo de «Asignaciones estructuradas e if-init en C++17» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Asignaciones estructuradas e if-init en C++17»?
Desestructure tuplas y pares con asignaciones estructuradas y use sentencias if-init. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C++ Academy?
No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Asignaciones estructuradas e if-init en C++17»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C++ Academy?
Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- auto, decltype y deducción de tipos
- Range-based for, nullptr y enum class
- Expresiones lambda: captura, mutable y genéricas
- Asignaciones estructuradas e if-init en C++17