C++ Academy · Oppitunti

Rakenteinen sidonta ja if-init C++17:ssa

Pura tuple- ja pair-rakenteita rakenteisilla sidonnoilla ja käytä if-init-lauseita.

Oppitunti 4/413 vaihetta

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;   // 99

const-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ää.

Aloita maksutta

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

  1. auto, decltype ja tyypin päättely
  2. Range-pohjainen for, nullptr ja enum class
  3. Lambda-lausekkeet: capture, mutable, generic
  4. Rakenteinen sidonta ja if-init C++17:ssa
← Takaisin: C++ Academy