Što je Structured Binding u C++?
Vezanje strukture je C++ značajka koja je dodana u C++17 koja također dopušta dekompoziciju strukture ili torke u pojedinačne varijable, poboljšavajući konciznost koda. Može se koristiti za jednostavniju sintaksu pristupa članu strukture i smanjenje mogućnosti pogrešaka uzrokovanih upisnim pogreškama ili netočnim indeksiranjem.
Sintaksa
Sintaksa vezanja strukture u C++ je sljedeća:
auto [ var1 , var2 , ... ] = izraz ;
U sintaksi za vezanje strukture u C++, gdje su 'var1' i 'var2' imena varijabli, a 'izraz' je izraz koji daje strukturu ili klasu. Koristimo automatske ključne riječi za deklariranje varijabli koje se automatski stvaraju.
Modifikatori
Modifikatori se mogu koristiti u kombinaciji sa strukturiranim vezovima. Njihova sintaksa navedena je u nastavku:
auto i [ a , b , c , ... ] = izraz ;
auto && [ a , b , c , ... ] = izraz ;
Operator “&” ili “&&” koji se koristi u deklaraciji definira je li vezanje referenca lvalue ili rvalue. Referenca lvalue predstavljena s '&' uspostavlja referencu koja se može koristiti za promjenu vrijednosti varijabli vezanja. Promjene vrijednosti napravljene korištenjem reference vidjet će se u izvornoj strukturi ili torci.
Referenca rvalue predstavljena s '&&', s druge strane, daje referencu koja je ograničena na korištenje za čitanje vrijednosti varijabli uključenih u vezanje. Zgodan je za vezanje na prolazne objekte ili rvrijednosti koje treba uništiti budući da izbjegava stvaranje replike objekta, što može oduzimati memoriju i vrijeme.
Primjer 1: Povezivanje strukture u C++
Slijedi primjer vezivanja C++ strukture:
#includekoristeći prostor imena std ;
strukturirati kocka
{
int x ;
int i ;
int S ;
} ;
int glavni ( )
{
c-kocka = { 10 , dvadeset , 30 } ;
auto [ x_koordinata , y_koordinata , z_koordinata ] = c ;
cout << 'X os: ' << x_koordinata << endl ;
cout << 'Y-os: ' << y_koordinata << endl ;
cout << 'Z os: ' << z_koordinata << endl ;
povratak 0 ;
}
U gornjem primjeru deklariramo kocku strukture s tri cijela broja x, y i z. Struktura prikazuje kocku u prostoru. Kreira se varijabla c tipa cube i inicijalizira s vrijednostima (10,20,30). U ovoj strukturi koda vezanje dodjeljuje vrijednosti članova x, y i z strukture pojedinačnim varijablama x_coordinate, y_coordinate, z_coordinate pomoću sintakse auto[ x_coordinate, y_coordinate, z_coordinate] = c. Ishod navedenog prikazan je u nastavku:
Primjer 2: Povezivanje strukture u C++ za raspakiranje strukture
Slijedi primjer vezivanja strukture za raspakiranje strukture:
#include#include
koristeći prostor imena std ;
strukturirati Student {
naziv niza ;
int dob ;
} ;
int glavni ( ) {
Student s { 'Hamza' , 32 } ;
auto [ Ime , dob ] = s ;
cout << Ime << ' je ' << dob << 'godina.' << endl ;
povratak 0 ;
}
U gornjem kodu, struktura Student ima dva člana: a Ime to je string i an dob to je cijeli broj. Zatim kreiramo objekt Student i dodjeljujemo početne vrijednosti svakom od njegovih članova. Članovi s se zatim odvajaju u ime varijable i starost pomoću strukturnog povezivanja, a te se vrijednosti zatim ispisuju kao na snimci zaslona u nastavku:
Primjer 3: Vezanje strukture u C++ s modifikatorima
Ispod je primjer vezivanja strukture koji koristi modifikator za ažuriranje vrijednosti varijable kao num1 i num2:
#include#include
koristeći prostor imena std ;
int glavni ( ) {
tuple < int , int > t { 25 , dvadeset } ;
auto i [ broj1 , broj2 ] = t ;
cout << 'Vrijednost num1 = ' << broj1 << ', num2 = ' << broj2 << ' \n ' ;
broj1 = 30 ;
cout << 'Promijenjena vrijednost num1 = ' << broj1 << ', num2 = ' << broj2 <<
' \n ' ;
auto && [ broj3 , broj4 ] = napraviti_torku ( 100 , 250 ) ;
cout << 'Sada vrijednost num3 = ' << broj3 << ', num4 = ' << broj4 << ' \n ' ;
povratak 0 ;
}
U prethodnom kodu gradimo torku t i koristimo referencu lvalue za povezivanje njenih komponenti s num1 i num2. Zatim mijenjamo vrijednost num1 u 30 i ispisujemo vrijednosti num1 i num2. Također izgradite privremenu torku putem make_tuple(100, 250) i koristite referencu rvalue za povezivanje njenih elemenata s num3 i num4. Vrijednosti num3 i num4 se tada ispisuju jer su num3 i num4 povezani s referencom rvalue, ne mogu se koristiti za promjenu privremene torke koju formira make_tuple(100, 250). Oni su sposobni samo čitati iz njega. Kada pokrenete program, na ekranu će se prikazati sljedeći rezultat:
Zaključak
Vezanje strukture je značajka u C++ koja raspakira više vrijednosti strukture ili klase u pojedinačne varijable u jednom izrazu, što rezultira sažetijim, čitljivijim i sigurnijim kodom. Vezanje strukture pomoću modifikatora usmjerava proces mijenjanja vrijednosti unutar strukturiranih objekata.