Ce este Structured Binding în C++?
Legarea structurii este o caracteristică C++ care a fost adăugată în C++17, care permite, de asemenea, descompunerea unei structuri sau a unui tuplu în variabile individuale, îmbunătățind concizia codului. Poate fi folosit pentru a simplifica sintaxa de acces la membrii struct și pentru a reduce posibilitatea erorilor cauzate de greșeli de scriere sau de indexare incorectă.
Sintaxă
Sintaxa legării structurii în C++ este următoarea:
auto [ var1 , var2 , ... ] = expresie ;
În sintaxa pentru legarea structurii în C++, unde „var1” și „var2” sunt nume de variabile, iar „expression” este o expresie care dă o structură sau o clasă. Folosim cuvinte cheie automate pentru a declara variabilele care sunt create automat.
Modificatori
Modificatorii pot fi utilizați în împerechere cu legături structurate. Sintaxa lor este menționată mai jos:
auto & [ A , b , c , ... ] = expresie ;
auto && [ A , b , c , ... ] = expresie ;
Operatorul „&” sau „&&” utilizat în declarație definește dacă legarea este o referință lvalue sau rvalue. O referință lvalue reprezentată de „&” stabilește o referință care poate fi utilizată pentru a modifica valorile variabilelor de legare. Modificările aduse valorilor făcute folosind referința vor fi văzute în structura sau tuplu original.
Referința rvalue reprezentată de „&&”, pe de altă parte, oferă o referință care se limitează la a fi utilizată pentru citirea valorii variabilelor incluse în legare. Este la îndemână pentru legarea la obiecte tranzitorii sau valori r care trebuie distruse, deoarece evită realizarea unei replicări a obiectului, acest lucru poate consuma memorie și timp.
Exemplul 1: Legarea structurii în C++
Următorul este un exemplu de legare a structurii C++:
#includefolosind namespace std ;
struct cub
{
int X ;
int și ;
int Cu ;
} ;
int principal ( )
{
c-cub = { 10 , douăzeci , 30 } ;
auto [ coordonata_x , y_coordonate , coordonata_z ] = c ;
cout << 'Axa X : ' << coordonata_x << endl ;
cout << 'Axa Y:' << y_coordonate << endl ;
cout << 'Axa Z:' << coordonata_z << endl ;
întoarcere 0 ;
}
În exemplul de mai sus, declarăm un cub struct cu trei numere întregi x, y și z. Structura prezintă un cub în spațiu. O variabilă c de tip cub este creată și inițializată cu valori (10,20,30). În această structură de cod, legarea atribuie valori ale membrilor x, y și z ale structurii variabilelor individuale x_coordinate, y_coordinate, z_coordinate, respectiv, folosind sintaxa auto[ x_coordinate, y_coordinate, z_coordinate ] = c. Rezultatul de mai sus este prezentat mai jos:
Exemplul 2: Legarea structurii în C++ pentru a despacheta un Struct
Următorul este un exemplu de legare a structurii de despachetare a unei structuri:
#include#include <șir>
folosind namespace std ;
struct Student {
nume șir ;
int vârstă ;
} ;
int principal ( ) {
Elevi { 'Hamza' , 32 } ;
auto [ Nume , vârstă ] = s ;
cout << Nume << ' este ' << vârstă << ' varsta.' << endl ;
întoarcere 0 ;
}
În codul de mai sus, o structură Student are doi membri: a Nume adică o sfoară și o vârstă adică un număr întreg. Apoi, creăm obiectul Student și atribuim valori inițiale fiecăruia dintre membrii acestuia. Membrii lui s sunt apoi separați în numele și vârsta variabilei folosind legarea structurală, iar aceste valori sunt apoi tipărite ca în captura de ecran de mai jos:
Exemplul 3: Legarea structurii în C++ cu modificatori
Mai jos este un exemplu de legare a structurii care utilizează un modificator pentru a actualiza valoarea unei variabile ca num1 și num2:
#include#include
folosind namespace std ;
int principal ( ) {
tuplu < int , int > t { 25 , douăzeci } ;
auto & [ num1 , num2 ] = t ;
cout << 'Valoarea lui num1 = ' << num1 << ', num2 = ' << num2 << ' \n ' ;
num1 = 30 ;
cout << „Valoarea schimbată a num1 = ” << num1 << ', num2 = ' << num2 <<
' \n ' ;
auto && [ numărul 3 , num4 ] = make_tuple ( 100 , 250 ) ;
cout << 'Acum valoarea lui num3 = ' << numărul 3 << ', num4 = ' << num4 << ' \n ' ;
întoarcere 0 ;
}
În codul precedent, construim un tuplu t și folosim referința lvalue pentru a lega componentele sale la num1 și num2. Apoi schimbăm valoarea lui num1 la 30 și scoatem valorile num1 și num2. De asemenea, construiți un tuplu temporar prin make_tuple(100, 250) și utilizați o referință rvalue pentru a-și lega elementele la num3 și num4. Valorile lui num3 și num4 sunt apoi tipărite deoarece num3 și num4 sunt cuplate cu o referință rvalue, ele nu pot fi folosite pentru a schimba tuplul temporar format de make_tuple(100, 250). Sunt capabili doar să citească din ea. Când executați programul, următorul rezultat va fi afișat pe ecran:
Concluzie
Legarea structurii este o caracteristică din C++ care despachetează mai multe valori ale unei structuri sau ale unei clase în variabile individuale într-o singură expresie, rezultând un cod mai concis, mai lizibil și mai sigur. Legarea structurii folosind modificatori simplifică procesul de modificare a valorilor în cadrul obiectelor structurate.