Primeri nizov C++ Constexpr

Primeri Nizov C Constexpr



Ta članek bo razpravljal o constexpr, pomembnem dodatku k programskemu jeziku C++, ki je bil uveden v C++11 in dodatno izboljšan v C++14, in signalizira prevajalniku, da je spremenljivka, funkcija ali konstruktor objekta prevajalnik. časovna konstanta. Revolucioniral je način, kako razvijalci ustvarjajo in manipulirajo s konstantami. S pomočjo constexpr lahko razvijalci definirajo izraze in vrednosti, ki so nespremenljivi in ​​ovrednoteni med prevajanjem in ne med izvajanjem. Glavna prednost vključitve constexpr v kodo je njeno jamstvo za stalnost.

Kakšna je uporaba niza C++ Constexpr?

Uporaba constexpr lahko vodi do bolj kompaktnih in optimiziranih izvedljivih datotek. Ker vrednosti vnaprej določi prevajalnik, so lahko nastale dvojiške datoteke manjše, kar pomeni bolj ekonomično uporabo sistemskih virov, kar lahko izboljša zmogljivost programske opreme na različnih platformah. Ena posebna pomembna prednost te funkcije je zmanjšanje časa izvajanja. Ker se vrednosti izračunajo med postopkom prevajanja, kadar koli je to izvedljivo, postane ocena izvajalnega časa manj potrebna. To povečanje učinkovitosti ne le pospeši izvajanje, ampak tudi racionalizira celotno delovanje programa.

1. primer: uporaba Constexpr v C++ za faktorski izračun

V tem primeru bomo uporabili constexpr, ki omogoča, da se izračuni izvedejo v času prevajanja in ne med izvajanjem. V kontekstu izračunavanja faktorielov je mogoče uporabiti običajno matematično operacijo, ki je constexpr, za izračun faktorialnih vrednosti med prevajanjem. Preglejmo in pregledajmo naslednjo kodo, nato pa si oglejmo razlago kode:







#include

constexpr int faktorial ( int n ) {

vrnitev n <= 1 ? 1 : ( n * faktorial ( n - 1 ) ) ;

}

int glavni ( ) {

int na enem = 5 ;

std :: cout << 'Faktoriel od' << na enem << ' = ' << faktorial ( na enem ) << std :: konec ;

}

Podani primer kode prikazuje uporabo constexpr za izračun faktoriala števila na rekurziven način. Prevajalnik lahko ovrednoti faktorski izraz v času prevajanja v tem primeru, ker je faktorska funkcija deklarirana in definirana s specifikatorjem constexpr. Z uporabo constexpr v programu C++ prevajalnik ovrednoti faktorski izraz 5 v času prevajanja, kar odpravi potrebo po izračunu med izvajanjem.



Zdaj pa si oglejmo podrobno razčlenitev kode s posebnimi podrobnostmi in razlagami.



Najprej uporabimo #include za vključitev datoteke glave »iostream«, ki zagotavlja bistvene vhodne in izhodne funkcije, kot je »std::cout« za tiskanje na konzolo.





Nato se premaknemo v funkcijo factorial() (rekurzivno), ki je 'constexpr int factorial(int n)'. Ta funkcija factorial() definira rekurzivno funkcijo, ki izračuna faktorial celega števila »n«. Constexpr nakazuje, da so lahko optimizacije zmogljivosti posledica vrednotenja funkcije med prevajanjem.

Vrnitev n <= 1 ? 1 : (n * faktorial(n – 1)) vrstica uporablja pogojni izraz za rekurzijo, ki navaja, da če je »n« manjše ali enako 1, vrne 1 (osnovni primer). Če ni, izvede izračun faktoriala (n! = n * (n-1)!), ki je splošna formula za izračun faktoriala, tako da se večkrat pokliče z »n – 1« in nato pomnoži rezultat z »n ”. Te vrstice delujejo kot vratar za faktorski izračun. Preveri, ali je število na osnovni ravni, in vrne 1, če je tako. Če ne, sproži verižno reakcijo funkcijskih klicev, pri čemer vsak deluje na manjših številkah, dokler ni dosežen osnovni primer. Nato se rezultati pomnožijo v obratnem vrstnem redu. Sledi izhod kode za vašo referenco:



Primer 2: štetje malih črk za prikaz niza C++ Constexpr

Tukaj se bomo naučili, kako prešteti število malih črk z uporabo niza countexpr. V tem primeru je namen prešteti število malih črk v danem nizu z uporabo funkcije constexpr za zmanjšanje časa izvajanja. Funkcija countLowercase(), deklarirana kot constexpr, vzame niz »string_view« kot svoj parameter in ponovi vsak znak danega niza kot vhod. Za vsako malo črko, ki jo srečamo, se število poveča. Rezultat se nato pridobi v času prevajanja, ko funkcija deluje na konstantnih izrazih, kar prikazuje učinkovitost in prednosti zmogljivosti ocene v času prevajanja. Najprej preverite naslednjo kodo. Nato nadaljujte s podrobno razlago:

#include
#include
uporaba imenskega prostora std ;
constexpr velikost_t štetje z malimi črkami ( string_view s ) {
velikost_t štetje = 0 ;
za ( char c : s ) {
če ( je počasnejši ( c ) ) {
štetje ++;
}
}
vrnitev štetje ;
}
int glavni ( ) {
cout << 'Skupaj male črke v ' Male črke 'so ='
<< štetje z malimi črkami ( 'Male črke' ) << konec ;
}

Tukaj je podrobna razčlenitev kode z razlago vsake vrstice:

#include je vključen za uporabo standardne knjižnice vhodno/izhodnega toka za tiskanje sporočil. #include vključuje razred »string_view« za učinkovito manipulacijo nizov.

V funkciji countLowercase() funkcija »constexpr size_t countlower(string_view s)« prešteje male črke v danem pogledu niza. Int main() je vstopna točka programa, ki natisne sporočilo, ki označuje število malih črk v »LOWER CASE LETtErS« in pokliče funkcijo countLowercase() z »LoWeR CaSe LETtErS« kot vhodom in natisne rezultat. Glejte naslednji rezultat programa:

Primer 3: Demonstracija matrike z uporabo C++ Constexpr

Predstavitev matrike prikazuje, kako so matrike, ki so strukturirane zbirke elementov istega podatkovnega tipa, ustvarjene, dostopne in manipulirane v programskem jeziku. V nadaljevanju bomo razložili s primerom kodiranja, v katerem program ponuja preprost primer inicializacije in manipulacije polja v času prevajanja.

Predstavitev matrike ponazarja koncept matrik – strukturirane zbirke elementov, ki si delijo isto vrsto podatkov – in kako jih je mogoče ustvariti, dostopati do njih in jih manipulirati z uporabo programskega jezika. V naslednjem primeru kodiranja bomo prikazali, kako inicializirati matriko v času prevajanja, izračunati njeno velikost in natisniti elemente dane matrike. Oglejte si naslednjo podano kodo in nadaljujte z razlago:

#include
uporaba imenskega prostora std ;
int glavni ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int velikost_matrike = sizeof arrayint / sizeof ( int ) ;
cout << 'Dolžina matrike je = ' << velikost_matrike << konec ;
cout << 'Elementi v matriki so = ' ;
za ( int jaz = 0 ; jaz < velikost_matrike ; ++ jaz ) {
cout << arrayint [ jaz ] << ' ' ;
}
}

Ta program inicializira matriko constexpr, izračuna njeno dolžino v času prevajanja in nato natisne dolžino matrike in elemente na konzolo. Constexpr zagotavlja, da so matrika in njene lastnosti določene v času prevajanja. Razčlenimo kodo in razložimo posamezne podrobnosti eno za drugo:

Za vključitev standardne knjižnice vhodno-izhodnega toka, ki omogoča uporabo funkcij, kot je »cout« za izhod, se pokliče #include . Program prične z izvajanjem s funkcijo int main(). Znotraj funkcije main() je definirana matrika »arrayint[]« z velikostjo 9 s stavkom constexpr int arrayint[9]. Niz je inicializiran s petimi številkami, preostali elementi pa so implicitno ostali 0. Int length_a = sizeof arrayint / sizeof(int); izračuna velikost 'arrayint' v bajtih.

Zanka »za« ponovi elemente matrike »arrayint[]« in vrednosti se nato natisnejo na konzolo. Poglejmo naslednji rezultat dane kode:

Zaključek

Uvedba in razvoj ključne besede constexpr v C++ sta spremenila način obravnavanja konstantnih izrazov in vrednosti. Ta članek je raziskal tri praktične primere, ki prikazujejo moč constexpr pri računanju faktorialov, štetju malih črk in inicializaciji nizov v času prevajanja. Ključni zaključki vključujejo izboljšano zmogljivost, skrajšane izračune časa izvajanja in izboljšano učinkovitost pomnilnika. Constexpr je dragoceno sredstvo za ustvarjanje zanesljivih, stalnih entitet znotraj kodne baze, ki zagotavlja nespremenljivost in prispeva k bolj poenostavljenim in učinkovitim programom.