Strukturbinding i C++

Strukturbinding I C



Strukturbinding giver dig mulighed for at udtrække elementerne fra en struktur eller klasse og tildele dem til forskellige variabler uden at have adgang til hvert medlem separat. Strukturbinding bruges til at eliminere behovet for manuel elementudtrækning og forbedrer læsbarheden og koncisiteten af ​​koden ved at tillade samtidig udpakning af adskillige elementer i en struktur eller klasse i forskellige variable. I denne øvelse vil vi diskutere arbejde, syntaks og eksempler på strukturbinding i C++.

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:

#include

bruger 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.