Structure Binding σε C++

Structure Binding Se C



Η δέσμευση δομής σάς επιτρέπει να εξαγάγετε τα στοιχεία από μια δομή ή κλάση και να τα αντιστοιχίσετε σε διαφορετικές μεταβλητές χωρίς να έχετε πρόσβαση σε κάθε μέλος ξεχωριστά. Η δέσμευση δομής χρησιμοποιείται για την εξάλειψη της ανάγκης για χειροκίνητη εξαγωγή στοιχείων και βελτιώνει την αναγνωσιμότητα και τη συνοπτικότητα του κώδικα επιτρέποντας την ταυτόχρονη αποσυσκευασία πολλών στοιχείων μιας δομής ή κατηγορίας σε διακριτές μεταβλητές. Σε αυτό το σεμινάριο, θα συζητήσουμε την εργασία, τη σύνταξη και παραδείγματα δέσμευσης δομής σε C++.

Τι είναι το Structured Binding στη C++;

Η δέσμευση δομής είναι μια δυνατότητα C++ που προστέθηκε στη C++17 και επιτρέπει επίσης την αποσύνθεση μιας δομής ή πλειάδας σε μεμονωμένες μεταβλητές, βελτιώνοντας τη συνοπτικότητα του κώδικα. Μπορεί να χρησιμοποιηθεί για να απλοποιήσει τη σύνταξη πρόσβασης μέλους της δομής και να μειώσει την πιθανότητα σφαλμάτων που προκαλούνται από τυπογραφικά λάθη ή λανθασμένη ευρετηρίαση.

Σύνταξη







Η σύνταξη της δέσμευσης δομής στη C++ είναι η εξής:



αυτο [ var1 , var2 , ... ] = έκφραση ;

Στη σύνταξη για δέσμευση δομής στη C++, όπου τα 'var1' και 'var2' είναι ονόματα μεταβλητών και η 'έκφραση' είναι μια έκφραση που αποδίδει μια δομή ή μια κλάση. Χρησιμοποιούμε αυτόματες λέξεις-κλειδιά για να δηλώσουμε μεταβλητές που δημιουργούνται αυτόματα.



Τροποποιητές

Οι τροποποιητές μπορούν να χρησιμοποιηθούν σε συνδυασμό με δομημένες συνδέσεις. Η σύνταξή τους αναφέρεται παρακάτω:





αυτο & [ ένα , σι , ντο , ... ] = έκφραση ;

αυτο && [ ένα , σι , ντο , ... ] = έκφραση ;

Ο τελεστής '&' ή '&&' που χρησιμοποιείται στη δήλωση καθορίζει εάν η δέσμευση είναι αναφορά lvalue ή rvalue. Μια αναφορά lvalue που αντιπροσωπεύεται από το '&' δημιουργεί μια αναφορά που μπορεί να χρησιμοποιηθεί για την αλλαγή των τιμών των δεσμευτικών μεταβλητών. Οι αλλαγές στις τιμές που έγιναν χρησιμοποιώντας την αναφορά θα φαίνονται στην αρχική δομή ή πλειάδα.

Η αναφορά rvalue που αντιπροσωπεύεται από το '&&', από την αντίθετη πλευρά, παρέχει μια αναφορά που περιορίζεται στο να χρησιμοποιηθεί για την ανάγνωση της τιμής των μεταβλητών που περιλαμβάνονται στη δέσμευση. Είναι βολικό για τη σύνδεση με παροδικά αντικείμενα ή τιμές r που πρέπει να καταστραφούν, καθώς αποφεύγεται η δημιουργία αντιγράφου του αντικειμένου, αυτό μπορεί να είναι μνήμη και χρονοβόρο.



Παράδειγμα 1: Σύνδεση δομής σε C++

Το παρακάτω είναι ένα παράδειγμα σύνδεσης δομής C++:

#include

χρησιμοποιώντας το namespace std ;

struct κύβος

{

ενθ Χ ;

ενθ και ;

ενθ Με ;

} ;

ενθ κύριος ( )

{

γ-κύβος = { 10 , είκοσι , 30 } ;

αυτο [ x_συντεταγμένη , y_coordinate , z_coordinate ] = ντο ;

cout << 'Άξονας Χ:' << x_συντεταγμένη << endl ;

cout << 'Άξονας Υ :' << y_coordinate << endl ;

cout << 'Άξονας Z:' << z_coordinate << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Στο παραπάνω παράδειγμα, δηλώνουμε έναν κύβο δομής με τρεις ακέραιους x, y και z. Η δομή δείχνει έναν κύβο στο διάστημα. Δημιουργείται μια μεταβλητή c τύπου cube και αρχικοποιείται με τιμές (10,20,30). Σε αυτήν τη δομή κώδικα, το binding εκχωρεί τιμές των μελών x, y και z της δομής στις μεμονωμένες μεταβλητές x_coordinate, y_coordinate, z_coordinate αντίστοιχα χρησιμοποιώντας τη σύνταξη auto[ x_coordinate, y_coordinate, z_coordinate ] = c. Η έξοδος των παραπάνω φαίνεται παρακάτω:

Παράδειγμα 2: Σύνδεση δομής σε C++ για αποσυσκευασία μιας δομής

Ακολουθεί ένα παράδειγμα δέσμευσης δομής για την αποσυσκευασία μιας δομής:

#include

#include

χρησιμοποιώντας το namespace std ;

struct Μαθητης σχολειου {

όνομα συμβολοσειράς ;

ενθ ηλικία ;

} ;

ενθ κύριος ( ) {

Φοιτητές { 'Hamza' , 32 } ;

αυτο [ όνομα , ηλικία ] = μικρό ;

cout << όνομα << ' είναι ' << ηλικία << ' χρονών.' << endl ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Στον παραπάνω κώδικα, μια δομή Student έχει δύο μέλη: α όνομα που είναι μια χορδή και μια ηλικία δηλαδή ακέραιος αριθμός. Στη συνέχεια, δημιουργούμε το αντικείμενο Student και εκχωρούμε αρχικές τιμές σε κάθε μέλος του. Στη συνέχεια, τα μέλη του s διαχωρίζονται στο όνομα και την ηλικία της μεταβλητής χρησιμοποιώντας δομική σύνδεση και στη συνέχεια αυτές οι τιμές εκτυπώνονται όπως στο παρακάτω στιγμιότυπο οθόνης:

Παράδειγμα 3: Σύνδεση δομής σε C++ με τροποποιητές

Παρακάτω είναι ένα παράδειγμα σύνδεσης δομής που χρησιμοποιεί έναν τροποποιητή για να ενημερώσει την τιμή μιας μεταβλητής ως num1 και num2:

#include

#include

χρησιμοποιώντας το namespace std ;

ενθ κύριος ( ) {

πλειάδα < ενθ , ενθ > t { 25 , είκοσι } ;

αυτο & [ num1 , num2 ] = t ;

cout << 'Η τιμή του num1 = ' << num1 << ', num2 = ' << num2 << ' \n ' ;

num1 = 30 ;

cout << 'Η αλλαγμένη τιμή του num1 = ' << num1 << ', num2 = ' << num2 <<

' \n ' ;

αυτο && [ αριθμός 3 , αρ.4 ] = make_tuple ( 100 , 250 ) ;

cout << 'Τώρα η τιμή του num3 = ' << αριθμός 3 << ', num4 = ' << αρ.4 << ' \n ' ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Στον προηγούμενο κώδικα, κατασκευάζουμε μια πλειάδα t και χρησιμοποιούμε την αναφορά lvalue για να συνδέσουμε τα στοιχεία της με το num1 και το num2. Στη συνέχεια αλλάζουμε την τιμή του num1 σε 30 και βγάζουμε τις τιμές num1 και num2. Δημιουργήστε επίσης μια προσωρινή πλειάδα μέσω του make_tuple(100, 250) και χρησιμοποιήστε μια αναφορά rvalue για να συνδέσετε τα στοιχεία της με τα num3 και num4. Στη συνέχεια, οι τιμές των num3 και num4 εκτυπώνονται επειδή τα num3 και num4 συνδέονται με μια αναφορά rvalue, δεν μπορούν να χρησιμοποιηθούν για την αλλαγή της προσωρινής πλειάδας που σχηματίζεται από το make_tuple(100, 250). Είναι ικανοί μόνο να διαβάσουν από αυτό. Όταν εκτελέσετε το πρόγραμμα, στην οθόνη θα εμφανιστεί το ακόλουθο αποτέλεσμα:

συμπέρασμα

Η δέσμευση δομής είναι μια δυνατότητα στη C++ που αποσυσκευάζει πολλαπλές τιμές μιας δομής ή μιας κλάσης σε μεμονωμένες μεταβλητές σε μία μόνο έκφραση, με αποτέλεσμα πιο συνοπτικό, ευανάγνωστο και ασφαλέστερο κώδικα. Η δέσμευση δομής με χρήση τροποποιητών απλοποιεί τη διαδικασία αλλαγής τιμών εντός δομημένων αντικειμένων.