Unión estructural

El enlace estructurado es  una innovación sintáctica  del estándar del lenguaje de programación C++17 [ 1 ] , diseñado para desempaquetar tipos de datos no estáticos complejos y representarlos como una composición de sus elementos constituyentes [2] [3] .

Sintaxis

El enlace estructural es una de las nuevas opciones para declarar variables en el lenguaje de programación C++ [4] . Define la relación de las variables declaradas con los componentes disponibles de un objeto complejo que actúa como su inicializador [5] :

atributo_opcional calificado_auto referencia_opcional [ lista_identificadores ] = expresión ; // declaración como enlace estructural atributo_opcional calificado_auto referencia_opcional [ lista_identificadores ] = { expresión }; // enlace estructural con inicialización de tupla atributo_opcional calificado_auto referencia_opcional [ lista_identificadores ] = ( expresión ); // enlace estructural para un tipo incompleto
dónde: optional_attribute es una secuencia de atributos opcionales, qualified_auto - una palabra clave autocon una especificación en forma de especificadores const, volatileetc. optional_reference es un operador de acceso opcional por referencia &o &&, identifier_list - una lista de variables declaradas, separadas por comas, expression es una expresión de inicialización que no puede ser una unión .

En cierto sentido, el uso del enlace estructural descompone el inicializador en sus componentes constituyentes [6] . Como consecuencia, el número de variables declaradas usando enlace estructural debe coincidir con el número de elementos del inicializador [1] .

Descripción

El enlace estructural permite acceder a los campos públicos de un objeto compuesto, por ejemplo, después de llamar a una función que devuelve un tipo de datos complejo. En muchos casos, el enlace estructural puede verse como una alternativa conveniente para lanzar excepciones [7] .

Para mejorar la legibilidad del código, no está prohibido usar un inicializador con enlace estructural en el encabezado de los operadores ifor for, donde se encuentra la verificación de condición [8] [9] .

El enlace estructural interactúa bien con las clases integradas estándar de la biblioteca STL , como pair[10] o tuple[11] .

Notas

  1. 1 2 Gregoire, 2018 , Encuadernaciones estructuradas, p. 26
  2. Lospinoso, 2019 , Encuadernaciones estructuradas, p. 222.
  3. Olsson, 2018 , Devolver valores múltiples, p. 64.
  4. Lospinoso, 2019 , Declaraciones de declaración, p. 213.
  5. Declaración de enlace estructurado (desde C++17) Archivado el 8 de septiembre de 2020 en Wayback Machine en.cppreference.com
  6. Josuttis, 2019 , Encuadernaciones estructuradas, p. 3.
  7. Lospinoso, 2019 , Alternativas a las Excepciones, p. 114.
  8. Lospinoso, 2019 , Sentencias de inicialización y si, p. 226, 227.
  9. Gregoire, 2018 , La función auditVoterRolls, p. 659.
  10. Lospinoso, 2019 , pareja, p. 374.
  11. Gregoire, 2018 , Encuadernaciones estructuradas, p. 717.

Fuentes

  • Marc Gregorio. C++ profesional: [ ing. ] . - Cuarta edición. - John Wiley & Sons, 2018. - ISBN 978-1-119-42130-6 .
  • Nicolai M. Josuttis. C++17: La guía completa : ] . - 2019. - ISBN 9783967307177 .
  • Juan Los Pinoso. Curso acelerado de C++: una introducción acelerada: [ ing. ] . - San Francisco: prensa sin almidón, 2019. - ISBN 978-1-59327-888-5 .
  • Mikael Olson. Referencia rápida de sintaxis de C++17: una guía de bolsillo para el lenguaje, las API y la biblioteca: [ ing. ] . - Tercera edicion. - Apress, 2018. - ISBN 978-1-4842-3599-7 . -doi : 10.1007 / 978-1-4842-3600-0 .