Rakenteinen sidonta ja if-init C++17:ssa
Pura tuple- ja pair-rakenteita rakenteisilla sidonnoilla ja käytä if-init-lauseita.
Rakenteinen sidonta ja if-init C++17:ssa on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Tietojen purkaminen osiin modernissa C++:ssa
C++17 lisäsi rakenteiset sidonnat, joiden avulla monikot, parit, taulukot ja aggregaatit voidaan purkaa siististi yksittäisiksi nimetyiksi muuttujiksi.
Perusmuoto
Käyttäkää muotoa auto [a, b, ...] määrittääksenne muuttujat, jotka sidotaan oikeanpuoleisen arvon osiin.
std::pair<std::string, int> p = {"Ada", 30};
auto [name, age] = p;
std::cout << name << " is " << age;Map-iteraation sitominen
Selkein parannus näkyy map-iteraatiossa. it.first- ja it.second-viittauksia ei enää tarvita.
std::map<std::string, int> ages = {{"Ada",30},{"Bob",24}};
for (const auto& [name, age] : ages) {
std::cout << name << " " << age << "\n";
}Viitesidonnat
Käyttäkää auto&-määrettä sitomaan arvot viitteinä. Sidottujen nimien muuttaminen muuttaa taustalla olevaa oliota.
std::pair<int, int> p = {1, 2};
auto& [a, b] = p;
a = 99;
std::cout << p.first; // 99const-sidonnat
Käyttäkää const auto& -määrettä vain lukuun tarkoitettuun tietojen purkamiseen ilman kopiointia.
for (const auto& [key, value] : map) {
// read only
}Taulukoiden ja monikkojen sitominen
Toimii kaikkien tuple-tyyppistä rajapintaa tukevien tyyppien kanssa, mukaan lukien C-taulukot ja std::tuple.
int arr[3] = {1, 2, 3};
auto [x, y, z] = arr;
std::tuple<int, std::string, double> t = {1, "hi", 3.14};
auto [a, s, d] = t;Tavallisten rakenteiden sitominen
Voitte purkaa minkä tahansa rakenteen, jonka jäsenet ovat julkisia. Nimet päätellään esittelyjärjestyksen perusteella.
struct Point { int x; int y; };
Point pt{3, 4};
auto [x, y] = pt;
std::cout << x << ", " << y;if-init-lauseet
C++17 lisäsi myös alustavat lauseet if- ja switch-rakenteille. Voitte esitellä väliaikaisen muuttujan otsikossa, jolloin sen näkyvyysalue on if- tai switch-rakenteen runko.
if (auto it = map.find("Ada"); it != map.end()) {
std::cout << it->second;
} else {
std::cout << "not found";
}Ominaisuuksien yhdistäminen
Sidonnat ja if-init toimivat yhdessä ja mahdollistavat elegantin koodin.
if (auto [it, inserted] = m.insert({"key", 42}); inserted) {
std::cout << "added";
} else {
std::cout << "already present";
}Sidontojen elinkaari
Sidonnat viittaavat taustalla olevan nimettömän muuttujan alikohteisiin. Ne ovat olemassa ympäröivän näkyvyysalueen loppuun asti, samalla tavoin kuin tavallinen paikallinen muuttuja.
Milloin sidontoja EI pidä käyttää
Jos jäsenen nimi sisältää merkityksen, jonka sidonnan nimi hävittäisi, suosikaa eksplisiittistä jäsenen käyttöä. Luettavuus on tärkeämpää kuin lyhyys.
Pikatarkistus
Mikä C++17:n ominaisuus mahdollistaa std::map-säilön läpikäynnin käyttämällä parin nimettyjä osia?
Kertaus
Rakenteiset sidonnat purkavat parit, monikot, taulukot ja rakenteet nimetyiksi muuttujiksi. Yhdistettynä C++17:n if-init-lauseisiin ne tekevät iteraatio- ja hakukoodista paljon selkeämpää.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”Rakenteinen sidonta ja if-init C++17:ssa” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “Rakenteinen sidonta ja if-init C++17:ssa”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Rakenteinen sidonta ja if-init C++17:ssa”?
Pura tuple- ja pair-rakenteita rakenteisilla sidonnoilla ja käytä if-init-lauseita. Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Rakenteinen sidonta ja if-init C++17:ssa”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- auto, decltype ja tyypin päättely
- Range-pohjainen for, nullptr ja enum class
- Lambda-lausekkeet: capture, mutable, generic
- Rakenteinen sidonta ja if-init C++17:ssa