Hva er strukturert binding i C++?
Strukturbinding er en C++-funksjon som ble lagt til i C++17 som også tillater dekomponering av en struktur eller tuppel til individuelle variabler, noe som forbedrer kodens konsisitet. Den kan brukes til å gjøre struct medlemstilgangssyntaks enklere og redusere muligheten for feil forårsaket av skrivefeil eller feil indeksering.
Syntaks
Syntaksen for strukturbinding i C++ er som følger:
auto [ var1 , var2 , ... ] = uttrykk ;
I syntaksen for strukturbinding i C++, der 'var1' og 'var2' er variabelnavn, og 'uttrykk' er et uttrykk som gir en struktur eller klasse. Vi bruker automatiske nøkkelord for å deklarere variabler som opprettes automatisk.
Modifikatorer
Modifikatorer kan brukes i paring med strukturerte bindinger. Syntaksen deres er nevnt nedenfor:
auto & [ en , b , c , ... ] = uttrykk ;
auto && [ en , b , c , ... ] = uttrykk ;
Operatoren '&' eller '&&' som brukes i erklæringen definerer om bindingen er en lvalue- eller rvalue-referanse. En lverdireferanse representert med '&' etablerer en referanse som kan brukes til å endre verdiene til bindingsvariablene. Endringer i verdiene som er gjort ved hjelp av referansen vil bli sett i den opprinnelige strukturen eller tuppelen.
rvalue-referansen representert ved '&&', på motsatt side, gir en referanse som er begrenset til å brukes til å lese verdien av variablene som er inkludert i bindingen. Den er nyttig for binding til forbigående objekter eller rverdier som må ødelegges siden den unngår å lage en kopi av objektet, dette kan være minne og tidkrevende.
Eksempel 1: Strukturbinding i C++
Følgende er et eksempel på C++ strukturbinding:
#includebruker navneområde std ;
struktur kube
{
int x ;
int og ;
int Med ;
} ;
int hoved- ( )
{
c-kuben = { 10 , tjue , 30 } ;
auto [ x_koordinat , y_koordinat , z_koordinat ] = c ;
cout << 'X-akse:' << x_koordinat << endl ;
cout << 'Y-akse:' << y_koordinat << endl ;
cout << 'Z-akse:' << z_koordinat << endl ;
komme tilbake 0 ;
}
I eksemplet ovenfor erklærer vi en strukturkube med tre heltall x, y og z. Strukturen viser en kube i rommet. En variabel c av typen kube opprettes og initialiseres med verdier (10,20,30). I denne kodestrukturen tildeler binding verdiene av medlemmene x, y og z av struct til de individuelle variablene henholdsvis x_coordinate, y_coordinate, z_coordinate ved å bruke syntaks auto[ x_coordinate, y_coordinate, z_coordinate ] = c. Utgangen av ovenstående er vist nedenfor:
Eksempel 2: Strukturbinding i C++ for å pakke ut en struktur
Følgende er et eksempel på strukturbinding ved utpakking av en struktur:
#include#inkluder
bruker navneområde std ;
struktur Student {
strengnavn ;
int alder ;
} ;
int hoved- ( ) {
Student s { 'Hamza' , 32 } ;
auto [ Navn , alder ] = s ;
cout << Navn << ' er ' << alder << ' år gammel.' << endl ;
komme tilbake 0 ;
}
I koden ovenfor har en studentstruktur to medlemmer: a Navn det er en streng og en alder det er et heltall. Deretter oppretter vi Student-objektet og tildeler startverdier til hvert av medlemmene. Medlemmene av s blir deretter separert i variabelens navn og alder ved hjelp av strukturell binding, og disse verdiene skrives deretter ut som i skjermbildet nedenfor:
Eksempel 3: Strukturbinding i C++ med modifikatorer
Nedenfor er et eksempel på strukturbinding som bruker en modifikator for å oppdatere verdien av en variabel som num1 og num2:
#include#inkluder
bruker navneområde std ;
int hoved- ( ) {
tuppel < int , int > t { 25 , tjue } ;
auto & [ nummer1 , nummer2 ] = t ;
cout << 'Verdien av num1 = ' << nummer1 << ', num2 = ' << nummer2 << ' \n ' ;
nummer1 = 30 ;
cout << 'Den endrede verdien av num1 = ' << nummer1 << ', num2 = ' << nummer2 <<
' \n ' ;
auto && [ nummer 3 , nummer 4 ] = make_tuple ( 100 , 250 ) ;
cout << 'Nå verdien av num3 = ' << nummer 3 << ', num4 = ' << nummer 4 << ' \n ' ;
komme tilbake 0 ;
}
I den foregående koden bygger vi en tuppel t og bruker lvalue-referansen til å koble komponentene til num1 og num2. Vi endrer deretter verdien av num1 til 30 og sender ut verdiene num1 og num2. Bygg også en midlertidig tuppel via make_tuple(100, 250) og bruk en rvalue-referanse for å knytte elementene til num3 og num4. Verdiene til num3 og num4 skrives deretter ut fordi num3 og num4 er kombinert med en rvalue-referanse, de kan ikke brukes til å endre den midlertidige tuppelen dannet av make_tuple(100, 250). De er bare i stand til å lese fra den. Når du kjører programmet, vil følgende resultat vises på skjermen:
Konklusjon
Strukturbinding er en funksjon i C++ som pakker ut flere verdier av en struktur eller klasse i individuelle variabler i et enkelt uttrykk, noe som resulterer i mer kortfattet, lesbar og sikrere kode. Strukturbinding ved bruk av modifikatorer effektiviserer prosessen med å endre verdier i strukturerte objekter.