Hvad er struktureret binding i C++?
Strukturbinding er en C++-funktion, der blev tilføjet i C++17, som også tillader nedbrydning af en struktur eller tupel til individuelle variabler, hvilket forbedrer kodens korthed. Det kan bruges til at gøre struct-medlemsadgangssyntaks enklere og mindske muligheden for fejl forårsaget af tastefejl eller forkert indeksering.
Syntaks
Syntaksen for strukturbinding i C++ er som følger:
auto [ var1 , var2 , ... ] = udtryk ;
I syntaksen for strukturbinding i C++, hvor 'var1' og 'var2' er variabelnavne, og 'udtryk' er et udtryk, der giver en struktur eller klasse. Vi bruger automatiske søgeord til at erklære variabler, der oprettes automatisk.
Modifikatorer
Modifikatorer kan bruges i parring med strukturerede bindinger. Deres syntaks er nævnt nedenfor:
auto & [ -en , b , c , ... ] = udtryk ;
auto && [ -en , b , c , ... ] = udtryk ;
Operatoren '&' eller '&&', der bruges i erklæringen, definerer, om bindingen er en lvalue- eller rvalue-reference. En lværdi-reference repræsenteret af '&' etablerer en reference, der kan bruges til at ændre værdierne af bindingsvariablerne. Ændringer af værdierne foretaget ved hjælp af referencen vil kunne ses i den originale struktur eller tuple.
rvalue-referencen repræsenteret ved '&&', på den modsatte side, giver en reference, der er begrænset til at blive brugt til at aflæse værdien af de variable, der er inkluderet i bindingen. Det er praktisk til at binde til forbigående objekter eller rvalues, der skal destrueres, da det undgår at lave en replika af objektet, dette kan være hukommelses- og tidskrævende.
Eksempel 1: Strukturbinding i C++
Følgende er et eksempel på C++ strukturbinding:
#includebruger navneområde std ;
struktur terning
{
int x ;
int og ;
int Med ;
} ;
int vigtigste ( )
{
c-terning = { 10 , tyve , 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 ;
Vend tilbage 0 ;
}
I ovenstående eksempel erklærer vi en strukturterning med tre heltal x, y og z. Strukturen viser en terning i rummet. En variabel c af typen terning oprettes og initialiseres med værdier (10,20,30). I denne kodestruktur tildeler binding værdier af medlemmerne x, y og z af struct til de individuelle variabler henholdsvis x_coordinate, y_coordinate, z_coordinate ved at bruge syntaks auto[ x_coordinate, y_coordinate, z_coordinate ] = c. Outputtet af ovenstående er vist nedenfor:
Eksempel 2: Strukturbinding i C++ for at udpakke en struktur
Følgende er et eksempel på strukturbinding ved udpakning af en struktur:
#include#include
bruger navneområde std ;
struktur Studerende {
strengnavn ;
int alder ;
} ;
int vigtigste ( ) {
Studerende { 'Hamza' , 32 } ;
auto [ navn , alder ] = s ;
cout << navn << 'er' << alder << ' år gammel.' << endl ;
Vend tilbage 0 ;
}
I ovenstående kode har en elevstruktur to medlemmer: a navn det er en streng og en alder det er et heltal. Derefter opretter vi Student-objektet og tildeler startværdier til hvert af dets medlemmer. Medlemmerne af s adskilles derefter i variablens navn og alder ved hjælp af strukturel binding, og disse værdier udskrives derefter som på skærmbilledet nedenfor:
Eksempel 3: Strukturbinding i C++ med modifikatorer
Nedenfor er et eksempel på strukturbinding, der gør brug af en modifikator til at opdatere værdien af en variabel som num1 og num2:
#include#inkluder
bruger navneområde std ;
int vigtigste ( ) {
tupel < int , int > t { 25 , tyve } ;
auto & [ nummer1 , nummer 2 ] = t ;
cout << 'Værdien af num1 = ' << nummer1 << ', num2 = ' << nummer 2 << ' \n ' ;
nummer1 = 30 ;
cout << 'Den ændrede værdi af num1 = ' << nummer1 << ', num2 = ' << nummer 2 <<
' \n ' ;
auto && [ nummer 3 , nummer 4 ] = make_tuple ( 100 , 250 ) ;
cout << 'Nu er værdien af num3 = ' << nummer 3 << ', num4 = ' << nummer 4 << ' \n ' ;
Vend tilbage 0 ;
}
I den foregående kode bygger vi en tuple t og bruger lvalue-referencen til at forbinde dens komponenter til num1 og num2. Vi ændrer derefter værdien af num1 til 30 og udsender værdierne num1 og num2. Byg også en midlertidig tupel via make_tuple(100, 250) og brug en rvalue-reference til at binde dens elementer til num3 og num4. Værdierne af num3 og num4 udskrives derefter, fordi num3 og num4 er koblet med en rvalue reference, de kan ikke bruges til at ændre den midlertidige tuple dannet af make_tuple(100, 250). De er kun i stand til at læse fra den. Når du kører programmet, vises følgende resultat på skærmen:
Konklusion
Strukturbinding er en funktion i C++, der udpakker flere værdier af en struktur eller klasse i individuelle variable i et enkelt udtryk, hvilket resulterer i mere kortfattet, læsbar og sikrere kode. Strukturbinding ved hjælp af modifikatorer strømliner processen med at ændre værdier i strukturerede objekter.