Structure Binding sa C++

Structure Binding Sa C



Binibigyang-daan ka ng structure binding na kunin ang mga elemento mula sa isang struct o klase at italaga ang mga ito sa iba't ibang variable nang hindi nagkakaroon ng access sa bawat miyembro nang hiwalay. Ginagamit ang structure binding para alisin ang pangangailangan para sa manual element extraction at pahusayin ang pagiging madaling mabasa at maikli ng code sa pamamagitan ng pagpapahintulot sa sabay-sabay na pag-unpack ng maraming elemento ng isang struct o klase sa mga natatanging variable. Sa tutorial na ito, tatalakayin natin ang pagtatrabaho, syntax, at mga halimbawa ng structure binding sa C++.

Ano ang Structured Binding sa C++?

Ang structure binding ay isang feature na C++ na idinagdag sa C++17 na nagbibigay-daan din sa pag-decomposition ng isang struct o tuple sa mga indibidwal na variable, na nagpapahusay sa conciseness ng code. Maaari itong magamit upang gawing mas simple ang syntax ng access ng miyembro ng struct at babaan ang posibilidad ng mga error na dala ng mga typo o maling pag-index.

Syntax







Ang syntax ng structure binding sa C++ ay ang mga sumusunod:



sasakyan [ var1 , var2 , ... ] = pagpapahayag ;

Sa syntax para sa structure binding sa C++, kung saan ang 'var1', at 'var2' ay mga variable na pangalan, at ang 'expression' ay isang expression na nagbubunga ng isang struct o class. Gumagamit kami ng mga auto keywords para magdeklara ng mga variable na awtomatikong nalilikha.



Mga modifier

Maaaring gamitin ang mga modifier sa pagpapares sa mga structured na binding. Ang kanilang syntax ay binanggit sa ibaba:





sasakyan at [ a , b , c , ... ] = pagpapahayag ;

sasakyan && [ a , b , c , ... ] = pagpapahayag ;

Tinutukoy ng operator na '&' o '&&' na ginamit sa deklarasyon kung ang pagbibigkis ay isang sanggunian sa halaga o rvalue. Ang isang reference ng value na kinakatawan ng '&' ay nagtatatag ng isang reference na maaaring gamitin upang baguhin ang mga halaga ng mga umiiral na variable. Ang mga pagbabago sa mga value na ginawa gamit ang reference ay makikita sa orihinal na istraktura o tuple.

Ang rvalue reference na kinakatawan ng '&&', sa kabilang banda, ay nagbibigay ng reference na limitado sa paggamit para sa pagbabasa ng value ng mga variable na kasama sa binding. Ito ay madaling gamitin para sa pagbubuklod sa mga lumilipas na bagay o mga halaga na kailangang sirain dahil iniiwasan nito ang paggawa ng isang kopya ng bagay, maaari itong maging memorya at nakakaubos ng oras.



Halimbawa 1: Structure Binding sa C++

Ang sumusunod ay isang halimbawa ng C++ structure binding:

#include

gamit ang namespace std ;

struct kubo

{

int x ;

int at ;

int Sa ;

} ;

int pangunahing ( )

{

c-kubo = { 10 , dalawampu , 30 } ;

sasakyan [ x_coordinate , y_coordinate , z_coordinate ] = c ;

cout << 'X axis :' << x_coordinate << endl ;

cout << 'Y-axis :' << y_coordinate << endl ;

cout << 'Z axis :' << z_coordinate << endl ;

bumalik 0 ;

}

Sa halimbawa sa itaas, ipinapahayag namin ang isang struct cube na may tatlong integer na x, y, at z. Ang istraktura ay nagpapakita ng isang kubo sa espasyo. Ang isang variable na c ng uri ng cube ay nilikha at pinasimulan na may mga halaga (10,20,30). Sa istruktura ng code na ito, ang binding ay nagtatalaga ng mga halaga ng mga miyembrong x, y, at z ng struct sa mga indibidwal na variable na x_coordinate, y_coordinate, z_coordinate ayon sa pagkakabanggit sa pamamagitan ng paggamit ng syntax auto[ x_coordinate, y_coordinate, z_coordinate ] = c. Ang output ng nasa itaas ay ipinapakita sa ibaba:

Halimbawa 2: Structure Binding sa C++ para Mag-unpack ng Struct

Ang sumusunod ay isang halimbawa ng structure binding ng pag-unpack ng isang struct:

#include

#include

gamit ang namespace std ;

struct Mag-aaral {

pangalan ng string ;

int edad ;

} ;

int pangunahing ( ) {

Mag-aaral s { 'Hamza' , 32 } ;

sasakyan [ pangalan , edad ] = s ;

cout << pangalan << 'ay' << edad << ' taong gulang.' << endl ;

bumalik 0 ;

}

Sa code sa itaas, ang isang Student struct ay may dalawang miyembro: a pangalan iyon ay isang string at isang edad iyon ay isang integer. Pagkatapos, gagawa kami ng Student object at nagtatalaga ng mga paunang halaga sa bawat miyembro nito. Ang mga miyembro ng s ay pinaghihiwalay sa pangalan at edad ng variable gamit ang structural binding, at ang mga value na ito ay ipi-print tulad ng sa screenshot sa ibaba:

Halimbawa 3: Structure Binding sa C++ With Modifiers

Nasa ibaba ang isang halimbawa ng structure binding na gumagamit ng modifier para i-update ang value ng variable bilang num1 at num2:

#include

#include

gamit ang namespace std ;

int pangunahing ( ) {

tuple < int , int > t { 25 , dalawampu } ;

sasakyan at [ num1 , num2 ] = t ;

cout << 'Ang halaga ng num1 = ' << num1 << ', num2 = ' << num2 << ' \n ' ;

num1 = 30 ;

cout << 'Ang binagong halaga ng num1 = ' << num1 << ', num2 = ' << num2 <<

' \n ' ;

sasakyan && [ numero3 , num4 ] = gumawa_tuple ( 100 , 250 ) ;

cout << 'Ngayon ang halaga ng num3 = ' << numero3 << ', num4 = ' << num4 << ' \n ' ;

bumalik 0 ;

}

Sa naunang code, bumuo kami ng tuple t at ginagamit ang reference ng lvalue para i-link ang mga bahagi nito sa num1 at num2. Pagkatapos ay babaguhin namin ang halaga ng num1 sa 30 at i-output ang mga halaga ng num1 at num2. Bumuo din ng pansamantalang tuple sa pamamagitan ng make_tuple(100, 250) at gumamit ng rvalue reference upang itali ang mga elemento nito sa num3 at num4. Ang mga value ng num3 at num4 ay ipi-print dahil ang num3 at num4 ay isinama sa isang rvalue reference, hindi magagamit ang mga ito para baguhin ang pansamantalang tuple na nabuo ng make_tuple(100, 250). May kakayahan lang silang magbasa mula dito. Kapag pinaandar mo ang programa, ang sumusunod na resulta ay ipapakita sa screen:

Konklusyon

Ang structure binding ay isang feature sa C++ na nag-unpack ng maraming value ng isang struct o class sa mga indibidwal na variable sa isang expression, na nagreresulta sa mas maigsi, nababasa, at mas ligtas na code. Ang structure binding gamit ang mga modifier ay nag-streamline sa proseso ng pagbabago ng mga value sa loob ng structured objects.