Čemu služi niz C++ Constexpr?
Korištenje constexpr-a može dovesti do kompaktnijih i optimiziranih izvršnih datoteka. Budući da vrijednosti unaprijed određuje kompilator, dobivene binarne datoteke mogu biti manje, čime se ostvaruje ekonomičnija upotreba resursa sustava, što zauzvrat može poboljšati performanse softvera na različitim platformama. Jedna posebna značajna prednost ove značajke je smanjenje koje donosi u proračunima vremena izvođenja. Kako se vrijednosti izračunavaju tijekom procesa kompilacije kad god je to moguće, procjena vremena izvođenja postaje manje potrebna. Ovo povećanje učinkovitosti ne samo da ubrzava izvršenje, već i pojednostavljuje sveukupne operacije programa.
Primjer 1: Korištenje Constexpr-a u C++ za izračun faktorijela
U ovom primjeru koristit ćemo constexpr koji omogućuje izvođenje izračuna u vrijeme prevođenja, a ne u vrijeme izvođenja. U kontekstu izračunavanja faktorijela, uobičajena matematička operacija, koja je constexpr, može se iskoristiti za izračunavanje vrijednosti faktorijela tijekom kompilacije. Ispitajmo i pregledajmo sljedeći kod, a zatim pogledajmo objašnjenje koda:
#include
constexpr int faktorijel ( int n ) {
povratak n <= 1 ? 1 : ( n * faktorijel ( n - 1 ) ) ;
}
int glavni ( ) {
int na jedan = 5 ;
std :: cout << 'Faktorijel od' << na jedan << ' = ' << faktorijel ( na jedan ) << std :: endl ;
}
Navedeni primjer koda pokazuje upotrebu constexpr-a za izračunavanje faktorijela broja na rekurzivan način. Prevodilac može procijeniti faktorski izraz u vrijeme kompilacije u ovom primjeru jer je faktorska funkcija deklarirana i definirana specifikatorom constexpr. Koristeći constexpr u C++ programu, kompajler procjenjuje faktorijelni izraz 5 u vrijeme kompajliranja, eliminirajući potrebu za računanjem vremena izvođenja.
Pogledajmo sada detaljnu raščlambu koda s određenim detaljima i objašnjenjima.
Prvo koristimo #include
Nakon toga, prelazimo na funkciju factorial() (rekurzivnu) koja je 'constexpr int factorial(int n)'. Ova funkcija factorial() definira rekurzivnu funkciju koja izračunava faktorijel cijelog broja 'n'. Constexpr implicira da optimizacije performansi mogu rezultirati procjenom funkcije tijekom kompilacije.
Povrat n <= 1 ? 1 : (n * faktorijel(n – 1)) redak koristi uvjetni izraz za rekurziju koji kaže da ako je 'n' manje ili jednako 1, vraća 1 (osnovni slučaj). Ako nije, izračunava faktorijel (n! = n * (n-1)!), što je opća formula za izračunavanje faktorijela, ponavljajući se pozivom s 'n – 1' i zatim množenjem rezultata s 'n ”. Ove linije djeluju kao vratar za izračun faktorijela. Provjerava je li broj na osnovnoj razini i vraća 1 ako jest. Ako nije, pokreće se lančana reakcija poziva funkcija, pri čemu svaki radi na manjim brojevima dok se ne dosegne osnovni slučaj. Zatim se rezultati množe obrnutim redoslijedom. Sljedeći je izlaz koda za vašu referencu:
Primjer 2: Brojanje malih slova za demonstraciju C++ Constexpr niza
Ovdje ćemo naučiti kako prebrojati broj malih slova pomoću niza countexpr. U ovom primjeru, svrha je prebrojati broj malih slova u danom nizu pomoću značajke constexpr kako bi se smanjilo vrijeme izvođenja. Funkcija countLowercase(), deklarirana kao constexpr, uzima niz 'string_view' kao svoj parametar i ponavlja svaki znak zadanog niza kao ulaz. Za svako malo slovo na koje naiđemo, broj se povećava. Rezultat se tada dobiva u vrijeme kompajliranja jer funkcija radi na konstantnim izrazima, pokazujući učinkovitost i prednosti izvedbe procjene tijekom kompilacije. Najprije provjerite sljedeći kôd. Zatim prijeđite na detaljno objašnjenje:
#include#include
koristeći prostor imena std ;
constexpr veličina_t brojati Mala slova ( prikaz_stringa s ) {
veličina_t računati = 0 ;
za ( char c : s ) {
ako ( je niži ( c ) ) {
računati ++;
}
}
povratak računati ;
}
int glavni ( ) {
cout << 'Ukupno mala slova u ' Mala slova 'su ='
<< brojati Mala slova ( 'Mala slova' ) << endl ;
}
Evo detaljne raščlambe koda s objašnjenjem svakog retka:
#include
U funkciji countLowercase(), funkcija “constexpr size_t countlower(string_view s)” broji mala slova u zadanom prikazu niza. Int main() je ulazna točka programa koja ispisuje poruku koja označava broj malih slova u 'LoWeR CaSe LETtErS' i poziva funkciju countLowercase() s 'LoWeR CaSe LeTtErS' kao ulazom i ispisuje rezultat. Pogledajte sljedeći izlaz programa:
Primjer 3: Demonstracija polja korištenjem C++ Constexpr
Demonstracija niza pokazuje kako se nizovi koji su strukturirane zbirke elemenata iste vrste podataka stvaraju, kako im se pristupa i kako se njima manipulira unutar programskog jezika. U nastavku ćemo objasniti kroz primjer kodiranja u kojem program pruža jednostavan primjer inicijalizacije i manipulacije nizom tijekom kompilacije.
Demonstracija nizova ilustrira koncept nizova—strukturiranu zbirku elemenata koji dijele isti tip podataka—i način na koji se oni mogu stvoriti, kako im se može pristupiti i njima se može manipulirati pomoću programskog jezika. U sljedećem primjeru kodiranja pokazat ćemo kako inicijalizirati niz u vrijeme prevođenja, izračunati njegovu veličinu i ispisati elemente zadanog niza. Pogledajte sljedeći kod i prijeđite na objašnjenje:
#includekoristeći prostor imena std ;
int glavni ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int niz_veličine = veličina arrayint / veličina ( int ) ;
cout << 'Duljina niza je = ' << niz_veličine << endl ;
cout << 'Elementi u nizu su = ' ;
za ( int ja = 0 ; ja < niz_veličine ; ++ ja ) {
cout << arrayint [ ja ] << ' ' ;
}
}
Ovaj program inicijalizira niz constexpr, izračunava njegovu duljinu tijekom kompajliranja, a zatim ispisuje duljinu i elemente niza na konzoli. Constexpr osigurava da se niz i njegova svojstva određuju tijekom kompajliranja. Razbijmo kod i objasnimo specifične detalje jedan po jedan:
Za uključivanje standardne ulazno-izlazne biblioteke toka, dopuštajući korištenje funkcija poput 'cout' za izlaz, poziva se #include
Petlja 'for' iterira kroz elemente niza 'arrayint[]', a vrijednosti se zatim ispisuju na konzolu. Pogledajmo sljedeći izlaz zadanog koda:
Zaključak
Uvođenje i evolucija ključne riječi constexpr u C++ revolucionirali su način na koji se rukuje konstantnim izrazima i vrijednostima. Ovaj članak istraživao je tri praktična primjera, prikazujući snagu constexpr-a u računanju faktorijela, brojanju malih slova i inicijalizaciji nizova tijekom kompajliranja. Ključni zaključci uključuju poboljšane performanse, smanjeno vrijeme izvođenja proračuna i poboljšanu učinkovitost memorije. Constexpr je dragocjeno sredstvo za stvaranje pouzdanih, stalnih entiteta unutar baze koda, osiguravajući nepromjenjivost i doprinoseći modernijim i učinkovitijim programima.