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
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
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:
#includenaudojant 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
„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ų.