const-viitteet ja niiden käyttötarkoitus
Välitä suuria olioita tehokkaasti ja turvallisesti const-viitteillä.
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)); // rvalueEliniä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.
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
- Miksi viitteet ovat muuttujien aliaksia
- Arvon välitys ja viitteen välitys
- const-viitteet ja niiden käyttötarkoitus
- Viitteiden elinikä ja roikkuvat viitteet