O que é ligação estruturada em C++?
A ligação de estrutura é um recurso C++ que foi adicionado em C++17 que também permite a decomposição de uma estrutura ou tupla em variáveis individuais, melhorando a concisão do código. Ele pode ser usado para simplificar a sintaxe de acesso ao membro struct e reduzir a possibilidade de erros causados por erros de digitação ou indexação incorreta.
Sintaxe
A sintaxe da ligação de estrutura em C++ é a seguinte:
auto [ var1 , var2 , ... ] = expressão ;
Na sintaxe para ligação de estrutura em C++, onde “var1” e “var2” são nomes de variáveis e “expressão” é uma expressão que produz uma estrutura ou classe. Usamos palavras-chave automáticas para declarar variáveis que são criadas automaticamente.
Modificadores
Modificadores podem ser usados em pareamento com ligações estruturadas. Sua sintaxe é mencionada abaixo:
auto & [ a , b , c , ... ] = expressão ;
auto && [ a , b , c , ... ] = expressão ;
O operador “&” ou “&&” usado na declaração define se a ligação é uma referência lvalue ou rvalue. Uma referência lvalue representada por “&” estabelece uma referência que pode ser usada para alterar os valores das variáveis vinculantes. Alterações nos valores feitas usando a referência serão vistas na estrutura ou tupla original.
Já a referência rvalue representada por “&&”, fornece uma referência que se limita a ser utilizada para leitura do valor das variáveis incluídas no binding. É útil para vincular objetos transitórios ou rvalues que precisam ser destruídos, pois evita fazer uma réplica do objeto, o que pode consumir memória e muito tempo.
Exemplo 1: ligação de estrutura em C++
Veja a seguir um exemplo de ligação de estrutura C++:
#includeusando namespace std ;
estrutura cubo
{
int x ;
int e ;
int Com ;
} ;
int principal ( )
{
c-cubo = { 10 , vinte , 30 } ;
auto [ x_coordenada , coordenada_y , z_coordenada ] = c ;
cout << 'Eixo X:' << x_coordenada << fim ;
cout << 'Eixo Y: ' << coordenada_y << fim ;
cout << 'Eixo Z: ' << z_coordenada << fim ;
retornar 0 ;
}
No exemplo acima, declaramos um cubo struct com três inteiros x, y e z. A estrutura mostra um cubo no espaço. Uma variável c do tipo cubo é criada e inicializada com valores (10,20,30). Nesta estrutura de código, a vinculação atribui valores dos membros x, y e z de struct às variáveis individuais x_coordinate, y_coordinate, z_coordinate, respectivamente, usando a sintaxe auto[ x_coordinate, y_coordinate, z_coordinate ] = c. A saída do acima é mostrada abaixo:
Exemplo 2: ligação de estrutura em C++ para descompactar um Struct
A seguir está um exemplo de ligação de estrutura de desempacotamento de uma struct:
#include#include
usando namespace std ;
estrutura Estudante {
nome da string ;
int idade ;
} ;
int principal ( ) {
Aluno { 'Hamza' , 32 } ;
auto [ nome , idade ] = s ;
cout << nome << ' é ' << idade << ' anos.' << fim ;
retornar 0 ;
}
No código acima, uma estrutura Aluno tem dois membros: um nome isso é uma string e um idade isso é um número inteiro. Em seguida, criamos o objeto Aluno e atribuímos valores iniciais a cada um de seus membros. Os membros de s são então separados no nome e idade da variável usando ligação estrutural, e esses valores são impressos como na captura de tela abaixo:
Exemplo 3: ligação de estrutura em C++ com modificadores
Abaixo está um exemplo de ligação de estrutura que faz uso de um modificador para atualizar o valor de uma variável como num1 e num2:
#include#include
usando namespace std ;
int principal ( ) {
tupla < int , int > t { 25 , vinte } ;
auto & [ num1 , num2 ] = t ;
cout << 'O valor de num1 = ' << num1 << ', num2 = ' << num2 << ' \n ' ;
num1 = 30 ;
cout << 'O valor alterado de num1 = ' << num1 << ', num2 = ' << num2 <<
' \n ' ;
auto && [ número 3 , num4 ] = make_tuple ( 100 , 250 ) ;
cout << 'Agora o valor de num3 = ' << número 3 << ', num4 = ' << num4 << ' \n ' ;
retornar 0 ;
}
No código anterior, construímos uma tupla t e usamos a referência lvalue para vincular seus componentes a num1 e num2. Em seguida, alteramos o valor de num1 para 30 e exibimos os valores num1 e num2. Também construa uma tupla temporária via make_tuple(100, 250) e use uma referência rvalue para vincular seus elementos a num3 e num4. Os valores de num3 e num4 são impressos porque num3 e num4 são acoplados com uma referência de rvalue, eles não podem ser usados para alterar a tupla temporária formada por make_tuple(100, 250). Eles só são capazes de ler a partir dele. Ao executar o programa, o seguinte resultado aparecerá na tela:
Conclusão
A associação de estrutura é um recurso em C++ que descompacta vários valores de uma estrutura ou classe em variáveis individuais em uma única expressão, resultando em um código mais conciso, legível e seguro. A vinculação de estrutura usando modificadores agiliza o processo de alteração de valores em objetos estruturados.