C++ Constexpr eilučių pavyzdžiai

C Constexpr Eiluciu Pavyzdziai



Šiame straipsnyje bus kalbama apie constexpr, žymų C++ programavimo kalbos papildymą, kuris įdiegtas C++11 ir toliau patobulintas C++14, ir signalizuoja kompiliatoriui, kad kintamasis, funkcija arba objekto konstruktorius yra kompiliatorius. laiko konstanta. Tai pakeitė kūrėjų konstantų kūrimo ir manipuliavimo būdus. Naudodami constexpr, kūrėjai gali apibrėžti išraiškas ir reikšmes, kurios yra nekintamos ir įvertinamos kompiliavimo metu, o ne vykdymo metu. Pagrindinis „constexpr“ įtraukimo į kodą pranašumas yra jo pastovumo garantija.

Kas yra C++ Constexpr eilutės naudojimas?

Naudojant constexpr gali būti kompaktiškesni ir optimizuoti vykdomieji failai. Kadangi reikšmes iš anksto nustato kompiliatorius, gaunami dvejetainiai failai gali būti mažesni, o tai leidžia ekonomiškiau naudoti sistemos išteklius, o tai savo ruožtu gali pagerinti programinės įrangos našumą įvairiose platformose. Vienas ypatingas reikšmingas šios funkcijos pranašumas yra sumažėjęs vykdymo laiko skaičiavimas. Kadangi vertės apskaičiuojamos kompiliavimo proceso metu, kai tik įmanoma, vykdymo laiko vertinimas tampa mažiau reikalingas. Šis efektyvumo padidinimas ne tik pagreitina vykdymą, bet ir supaprastina visas programos operacijas.

1 pavyzdys: Constexpr naudojimas C++ faktoriniam skaičiavimui

Šiame pavyzdyje naudosime constexpr, kuris leidžia atlikti skaičiavimus kompiliavimo metu, o ne vykdymo metu. Skaičiuojant faktorines, kompiliavimo metu faktorių reikšmėms apskaičiuoti gali būti panaudota įprasta matematinė operacija, kuri yra constexpr. Išnagrinėkime ir peržiūrėkime šį kodą, o tada pažvelkime į kodo paaiškinimą:







#include

constexpr tarpt faktorinis ( tarpt n ) {

grąžinti n <= 1 ? 1 : ( n * faktorinis ( n - 1 ) ) ;

}

tarpt pagrindinis ( ) {

tarpt ant vieno = 5 ;

std :: cout << „Faktorius“ << ant vieno << '=' << faktorinis ( ant vieno ) << std :: endl ;

}

Pateiktas kodo pavyzdys parodo constexpr naudojimą apskaičiuojant skaičiaus faktorialą rekursiniu būdu. Šiame pavyzdyje kompiliatorius gali įvertinti faktorių išraišką kompiliavimo metu, nes faktorialinė funkcija deklaruojama ir apibrėžiama naudojant constexpr specifikatorių. Naudodamas constexpr C++ programoje, kompiliatorius įvertina faktorių 5 kompiliavimo metu, pašalindamas vykdymo laiko skaičiavimo poreikį.



Dabar pažiūrėkime išsamų kodo suskirstymą su konkrečia informacija ir paaiškinimais.



Pirma, naudojame #include , kad įtrauktume „iostream“ antraštės failą, kuris suteikia pagrindines įvesties ir išvesties funkcijas, pvz., „std::cout“, kad būtų galima spausdinti į konsolę.





Vėliau pereiname į faktorial() funkciją (rekursyvinė), kuri yra „constexpr int factorial(int n)“. Ši faktorial() funkcija apibrėžia rekursinę funkciją, kuri apskaičiuoja „n“ sveikojo skaičiaus faktorialą. Constexpr reiškia, kad našumą galima optimizuoti įvertinus funkciją kompiliavimo metu.

Grąža n <= 1 ? 1 : (n * faktorial(n – 1)) eilutėje naudojama sąlyginė rekursijos išraiška, kuri teigia, kad jei 'n' yra mažesnis arba lygus 1, ji grąžina 1 (bazinis dydis). Jei ne, jis atlieka faktorialinį skaičiavimą (n! = n * (n-1)!), kuris yra bendroji faktorialo skaičiavimo formulė, pakartotinai pasikviesdama save su „n – 1“, o rezultatą padaugindama iš „n“ “. Šios eilutės veikia kaip faktorinio skaičiavimo vartai. Jis patikrina, ar skaičius yra baziniame lygyje, ir grąžina 1, jei taip. Jei ne, tai pradeda grandininę funkcijų iškvietimų reakciją, kurių kiekvienas dirba su mažesniais skaičiais, kol pasiekiamas bazinis dydis. Tada rezultatai dauginami atvirkštine tvarka. Toliau pateikiamas kodo išvestis jūsų nuorodai:



2 pavyzdys: mažųjų raidžių skaičiavimas, rodantis C++ Constexpr eilutę

Čia sužinosime, kaip suskaičiuoti mažųjų raidžių skaičių naudojant countexpr eilutę. Šiame pavyzdyje tikslas yra suskaičiuoti mažųjų raidžių skaičių tam tikroje eilutėje naudojant constexpr funkciją, kad būtų sumažintas vykdymo laiko skaičiavimas. Funkcija countLowercase(), deklaruojama kaip constexpr, kaip parametrą pasirenka eilutę 'string_view' ir kartoja kiekvieną nurodytos eilutės simbolį kaip įvestį. Kiekvienos mažosios raidės, su kuria susiduriame, skaičius didėja. Tada rezultatas gaunamas kompiliavimo metu, nes funkcija veikia pagal pastovias išraiškas, parodydama kompiliavimo laiko įvertinimo efektyvumą ir našumo naudą. Pirmiausia patikrinkite šį kodą. Tada pereikite prie išsamaus paaiškinimo:

#include
#include
naudojant vardų sritį std ;
constexpr dydis_t skaičiuoti mažosiomis raidėmis ( string_view s ) {
dydis_t skaičiuoti = 0 ;
dėl ( char c : s ) {
jeigu ( žemesnė ( c ) ) {
skaičiuoti ++;
}
}
grąžinti skaičiuoti ;
}
tarpt pagrindinis ( ) {
cout << „Iš viso mažųjų raidžių“ Mažosios raidės 'yra ='
<< skaičiuoti mažosiomis raidėmis ( 'Mažosios raidės' ) << endl ;
}

Čia pateikiamas išsamus kodo suskirstymas su kiekvienos eilutės paaiškinimu:

Įtraukta #include , kad būtų galima naudoti standartinę įvesties / išvesties srauto biblioteką pranešimams spausdinti. #include apima klasę 'string_view', kad būtų galima veiksmingai valdyti eilutes.

Funkcijos countLowercase() funkcija „constexpr size_t countlower(string_view s)“ skaičiuoja mažąsias raides tam tikroje eilutės rodinyje. Int main() yra programos įvesties taškas, kuris išspausdina pranešimą, nurodantį mažųjų raidžių skaičių „Mažosiose raidėse“ ir iškviečia funkciją CountLowercase() su įvestimi „Mažosios raidės“ ir išspausdina rezultatą. Žiūrėkite toliau pateiktą programos išvestį:

3 pavyzdys: Masyvo demonstravimas naudojant C++ Constexpr

Masyvo demonstravimas parodo, kaip masyvai, kurie yra struktūrinės to paties duomenų tipo elementų rinkiniai, yra kuriami, pasiekiami ir manipuliuojami programavimo kalba. Toliau paaiškinsime per kodavimo pavyzdį, kuriame programa pateikia paprastą kompiliavimo laiko masyvo inicijavimo ir manipuliavimo pavyzdį.

Masyvo demonstravimas iliustruoja masyvų sampratą – struktūrinį elementų, turinčių tą patį duomenų tipą, rinkinį ir kaip juos galima sukurti, pasiekti ir manipuliuoti naudojant programavimo kalbą. Toliau pateiktame kodavimo pavyzdyje parodysime, kaip inicijuoti masyvą kompiliavimo metu, apskaičiuoti jo dydį ir išspausdinti nurodyto masyvo elementus. Peržiūrėkite toliau pateiktą kodą ir pereikite prie paaiškinimo:

#include
naudojant vardų sritį std ;
tarpt pagrindinis ( ) {
constexpr tarpt arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr tarpt dydis_masyvas = dydis arrayint / dydis ( tarpt ) ;
cout << 'Masyvo ilgis yra =' << dydis_masyvas << endl ;
cout << 'Masyvo elementai yra = ' ;
dėl ( tarpt i = 0 ; i < dydis_masyvas ; ++ i ) {
cout << arrayint [ i ] << '' ;
}
}

Ši programa inicijuoja constexpr masyvą, apskaičiuoja jo ilgį kompiliavimo metu ir atspausdina masyvo ilgį bei elementus į konsolę. Constexpr užtikrina, kad masyvas ir jo savybės būtų nustatytos kompiliavimo metu. Sulaužykime kodą ir po vieną paaiškinkime konkrečias detales:

Norint įtraukti standartinę įvesties-išvesties srauto biblioteką, leidžiančią išvestiei naudoti tokias funkcijas kaip „cout“, iškviečiama #include . Programa pradeda vykdyti nuo int main() funkcijos. Funkcijoje main() apibrėžiamas masyvas „arrayint[]“, kurio dydis yra 9 su teiginiu constexpr int arrayint[9]. Masyvas inicijuojamas penkiais skaičiais, o likę elementai netiesiogiai liko 0. Int ilgis_a = masyvo dydis / sizeof(int); apskaičiuoja „masyvo“ dydį baitais.

„For“ kilpa kartojasi per „masyvo []“ masyvo elementus, o reikšmės išspausdinamos konsolėje. Pažiūrėkime tokią nurodyto kodo išvestį:

Išvada

Constexpr raktinio žodžio įvedimas ir raida C++ pakeitė tai, kaip tvarkomos pastovios išraiškos ir reikšmės. Šiame straipsnyje buvo nagrinėjami trys praktiniai pavyzdžiai, parodantys constexpr galią skaičiuojant faktorines, skaičiuojant mažąsias raides ir inicijuojant masyvus kompiliavimo metu. Pagrindiniai privalumai yra geresnis našumas, sutrumpinti vykdymo laiko skaičiavimai ir geresnis atminties efektyvumas. „Constexpr“ yra vertingas turtas kuriant patikimus, pastovius objektus kodų bazėje, užtikrinant nekintamumą ir prisidedant prie supaprastintų ir efektyvesnių programų.