constexpr ja käännösaika
Laske arvoja käännösaikana
constexpr ja käännösaika 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ä constexpr tarkoittaa
constexpr kertoo kääntäjälle, että arvo tai funktio voidaan laskea käännösaikana, jolloin tuloksena on todellinen käännösaikainen vakio.
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}constexpr-funktiot
constexpr-funktio voidaan suorittaa käännösaikana, kun sille annetaan vakioargumentteja, ja suoritushetkellä muulloin.
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}Käännösaikaiset vakiot taulukoissa
Koska constexpr-arvot tunnetaan käännösaikana, niitä voidaan käyttää taulukoiden kokojen määrittämiseen ja malliparametreina.
constexpr ja const
const tarkoittaa ”ei voi muuttua”, kun taas constexpr tarkoittaa ”tunnetaan käännösaikana”. Jokainen constexpr on implisiittisesti const, mutta kaikki const-arvot eivät ole constexpr-arvoja.
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}Rekursiivinen constexpr
constexpr-funktiot voivat kutsua itseään rekursiivisesti, joten kääntäjä voi laskea esimerkiksi kertomia ennen ohjelman suorittamista.
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}Laajempi constexpr modernissa C++:ssa
C++14:stä lähtien constexpr-funktiot voivat sisältää silmukoita, paikallisia muuttujia ja haarautumisia, joten monimutkaisia vakioita voidaan laskea käännösaikana.
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}constexpr-muuttujat on alustettava käännösaikana
constexpr-määreellä ilmoitetulla muuttujalla on oltava alustus, joka voidaan laskea käännösaikana, tai ohjelma ei käänny.
Käännösaikaisen laskennan hyödyt
Käännösaikana laskeminen tarkoittaa, ettei suoritusaikana synny kustannuksia, arvot ovat käytettävissä vakiokonteksteissa ja virheet havaitaan aikaisemmin.
constexpr ja mallit
constexpr-arvot sopivat luontevasti yhteen mallien ja std::array-tyypin kanssa, sillä niiden koot ja parametrit on määritettävä käännösaikaisina vakioina.
Milloin suoritus siirtyy suoritusaikaan
Jos constexpr-funktio saa ei-vakioisia argumentteja, se suoritetaan suoritusaikana tavallisen funktion tavoin — tästä ei aiheudu virhettä.
Suosikaa constexpr-määrettä vakioille
Käyttäkää constexpr-määrettä todellisille vakioille, kuten koolle, matemaattisille arvoille ja hakutaulukoille. Se ilmaisee tarkoituksen tarkemmin kuin const ja mahdollistaa käännösaikaiset takuut.
Pikatarkistus
Testatkaa, miten hyvin ymmärrätte constexpr-määrettä.
Kertaus
Opitte, että constexpr mahdollistaa muuttujien ja funktioiden arvioinnin käännösaikana, eroaa const-määreestä (joka ainoastaan estää muuttamisen), tukee silmukoita ja rekursiota modernissa C++:ssa sekä siirtyy suoritusaikaiseen laskentaan, kun syötteet eivät ole vakioita.
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 ”constexpr ja käännösaika” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “constexpr ja käännösaika”. 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 ”constexpr ja käännösaika”?
Laske arvoja käännösaikana 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 ”constexpr ja käännösaika”-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
- const-muuttujat ja -parametrit
- const-jäsenfunktiot
- constexpr ja käännösaika
- consteval ja constinit