C++ Academy · Oppitunti

const-viitteet ja niiden käyttötarkoitus

Välitä suuria olioita tehokkaasti ja turvallisesti const-viitteillä.

Oppitunti 3/413 vaihetta

const-viitteet ja niiden käyttötarkoitus on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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.

Mitä const-viite lupaa

const T& tarkoittaa: "En muuta sitä, mihin viittaan." Kääntäjä valvoo tätä.

void print(const std::string& s) {
    // s.clear();   // ERROR: s is const
    std::cout << s;
}

Miksi ei vain välittää arvona?

Suurten olioiden kopiointi on tuhlailevaa. Const-viite on käytännössä ilmainen, sillä se on toteutukseltaan vain osoitin, eikä se koskaan anna funktion muokata kutsujan tietoja.

Sido mihin tahansa

Const-viite voi sitoutua lvalue-arvoihin, rvalue-arvoihin ja väliaikaisiin olioihin, joten se on sallivin parametrityyppi vain luku -käyttöön.

void f(const std::string& s);
std::string a = "hi";
f(a);                 // lvalue
f("hello");           // temporary string
f(std::move(a));      // rvalue

Eliniän pidentäminen

Väliaikaisen olion sitominen const-viitteeseen pidentää sen eliniän viitteen eliniän mittaiseksi. Tämä on hyödyllistä olion rakentamisessa suoraan lausekkeessa.

const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`

Milloin const-viitettä EI pidä käyttää

Triviaalisti kopioitaville tyypeille (int, double, osoitin) käyttäkää arvona välittämistä. Viite lisää epäsuoran käsittelyn ilman hyötyä.

Const-viite aluepohjaisessa for-silmukassa

Tämä on kanoninen vain luku -silmukka. Se välttää sekä kopioinnin että tahattomat muutokset.

for (const auto& x : container) {
    process(x);
}

Const-viitteen palauttaminen

Palauttakaa const-viite, kun tulos on olemassa oleva olio, jota kutsujan ei pidä muokata, kuten jäsen tai välimuistissa oleva arvo.

class Person {
    std::string name_;
public:
    const std::string& name() const { return name_; }
};

Const-oikeellisuus

Merkitkää jokainen parametri ja jäsenfunktio, joka ei muuta tilaa, const-määritteellä. Kääntäjä havaitsee tahattomat kirjoitukset, mikä tarjoaa tehokkaan turvaverkon.

Const-jäsenfunktiot

Parametriluettelon jälkeen const-määritteellä merkitty jäsenfunktio ei voi muuttaa oliota. Sitä kutsutaan const-instansseille.

class Counter {
    int n_ = 0;
public:
    int value() const { return n_; }   // pure reader
    void increment() { n_++; }
};

Sudenkkuoppa: const_cast poistaa const-määritteen

Const-määritteen voi poistaa const_cast-operaatiolla, mutta alun perin const-olion tekeminen muokattavaksi tällä tavalla on määrittelemätöntä toimintaa. Käyttäkää sitä vain liittyessänne vanhoihin ei-const-rajapintoihin.

mutable sisäistä tilaa varten

mutable-avainsanalla const-jäsenfunktio voi muokata tiettyjä jäseniä. Tämä on hyödyllistä esimerkiksi välimuistien tai mutexien kanssa.

class Cache {
    mutable std::mutex mtx_;
    mutable std::optional<int> cached_;
public:
    int value() const {
        std::lock_guard<std::mutex> lk(mtx_);
        // ...
    }
};

Pikatarkistus

Miksi parametriksi on yleensä parempi kirjoittaa const std::string& kuin std::string?

Kertaus

Käyttäkää const T&-tyyppiä vain luku -parametreille, getter-funktioiden paluuarvoille ja aluepohjaisille silmukoille. Se on ei-triviaalien tyyppien kohdalla arvona välittämistä nopeampi ja ei-const-viitteitä turvallisempi.

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 ”const-viitteet ja niiden käyttötarkoitus” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “const-viitteet ja niiden käyttötarkoitus”. 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 ”const-viitteet ja niiden käyttötarkoitus”?

Välitä suuria olioita tehokkaasti ja turvallisesti const-viitteillä. 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 3/4.

Kuinka kauan ”const-viitteet ja niiden käyttötarkoitus”-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. Miksi viitteet ovat muuttujien aliaksia
  2. Arvon välitys ja viitteen välitys
  3. const-viitteet ja niiden käyttötarkoitus
  4. Viitteiden elinikä ja roikkuvat viitteet
← Takaisin: C++ Academy