Aké je použitie reťazca C++ Constexpr?
Využitie constexpr môže viesť ku kompaktnejším a optimalizovaným spustiteľným súborom. Keďže hodnoty sú vopred určené kompilátorom, výsledné binárne súbory môžu mať menšiu veľkosť, čím sa dosiahne hospodárnejšie využitie systémových prostriedkov, čo môže zvýšiť výkon softvéru na rôznych platformách. Jednou zo špeciálnych významných výhod tejto funkcie je redukcia, ktorú prináša do výpočtov za behu. Keďže hodnoty sa počítajú počas procesu kompilácie vždy, keď je to možné, vyhodnocovanie za behu sa stáva menej potrebným. Toto zvýšenie efektívnosti nielen zrýchľuje vykonávanie, ale aj zefektívňuje celkové operácie programu.
Príklad 1: Použitie Constexpr v C++ na výpočet faktora
V tomto príklade použijeme constexpr, ktorý umožňuje vykonávať výpočty v čase kompilácie a nie v čase spustenia. V kontexte výpočtu faktoriálov možno na výpočet faktoriálových hodnôt počas kompilácie využiť bežnú matematickú operáciu, ktorou je constexpr. Poďme preskúmať a skontrolovať nasledujúci kód a potom sa pozrieť na vysvetlenie kódu:
#include
constexpr int faktoriál ( int n ) {
vrátiť n <= 1 ? 1 : ( n * faktoriál ( n - 1 ) ) ;
}
int Hlavná ( ) {
int na jeden = 5 ;
std :: cout << 'Faktor' << na jeden << ' = ' << faktoriál ( na jeden ) << std :: endl ;
}
Uvedený príklad kódu demonštruje použitie constexpr na výpočet faktoriálu čísla rekurzívnym spôsobom. Kompilátor je v tomto príklade schopný vyhodnotiť faktoriálny výraz v čase kompilácie, pretože funkcia faktoriálu je deklarovaná a definovaná so špecifikátorom constexpr. Pomocou constexpr v programe C++ kompilátor vyhodnotí faktoriálny výraz 5 v čase kompilácie, čím eliminuje potrebu výpočtov za behu.
Teraz sa pozrime na podrobný rozpis kódu s konkrétnymi podrobnosťami a vysvetleniami.
Najprv použijeme #include
Potom prejdeme k funkcii faktorial() (rekurzívnej), ktorá je „constexpr int faktorial(int n)“. Táto funkcia faktorial() definuje rekurzívnu funkciu, ktorá vypočíta faktoriál „n“ celého čísla. Constexpr znamená, že optimalizácia výkonu môže vyplynúť z hodnotenia funkcie počas kompilácie.
Návrat n <= 1? 1 : (n * faktoriál(n – 1)) riadok používa podmienený výraz pre rekurziu, ktorý hovorí, že ak je „n“ menšie alebo rovné 1, vráti 1 (základný prípad). Ak nie, vykoná výpočet faktoriálu (n! = n * (n-1)!), čo je všeobecný vzorec na výpočet faktoriálu, opakovaným volaním seba s „n – 1“ a následným vynásobením výsledku „n“ “. Tieto riadky fungujú ako strážca pre faktoriálny výpočet. Skontroluje, či je číslo na základnej úrovni, a ak áno, vráti 1. Ak nie, spustí sa reťazová reakcia volaní funkcií, z ktorých každé pracuje na menších číslach, kým sa nedosiahne základný prípad. Potom sa výsledky vynásobia v opačnom poradí. Nasleduje výstup kódu pre vašu referenciu:
Príklad 2: Počítanie malých písmen Demonštrácia reťazca C++ Constexpr
Tu sa naučíme, ako spočítať počet malých písmen pomocou reťazca countexpr. V tomto príklade je účelom spočítať počet malých písmen v danom reťazci pomocou funkcie constexpr na zníženie výpočtov za behu. Funkcia countLowercase() deklarovaná ako constexpr berie ako svoj parameter reťazec „string_view“ a ako vstup iteruje každý znak daného reťazca. Pre každé malé písmeno, s ktorým sa stretneme, sa počet zvýši. Výsledok sa potom získa v čase kompilácie, pretože funkcia pracuje s konštantnými výrazmi, čo predstavuje efektívnosť a výhody hodnotenia v čase kompilácie. Najprv skontrolujte nasledujúci kód. Potom prejdite na podrobné vysvetlenie:
#include#include
pomocou menného priestoru std ;
constexpr size_t počítať Malé písmená ( string_view s ) {
size_t počítať = 0 ;
pre ( char c : s ) {
ak ( nižšie ( c ) ) {
počítať ++;
}
}
vrátiť počítať ;
}
int Hlavná ( ) {
cout << 'Celkový počet malých písmen v ' Malé písmená 'sú ='
<< počítať Malé písmená ( 'Malé písmená' ) << endl ;
}
Tu je podrobný rozpis kódu s vysvetlením každého riadku:
#include
Vo funkcii countLowercase() funkcia „constexpr size_t countlower(string_view s)“ počíta malé písmená v danom zobrazení reťazca. Int main() je vstupný bod programu, ktorý vytlačí správu, ktorá udáva počet malých písmen v „malých písmenách“ a vyvolá funkciu countLowercase() so vstupom „malé písmená“ a vytlačí výsledok. Pozrite si nasledujúci výstup programu:
Príklad 3: Ukážka poľa s využitím C++ Constexpr
Ukážka poľa ukazuje, ako sa vytvárajú polia, ktoré sú štruktúrovanými kolekciami prvkov rovnakého dátového typu, ako sa k nim pristupuje a ako sa s nimi manipuluje v programovacom jazyku. V nasledujúcom texte vysvetlíme pomocou príkladu kódovania, v ktorom program poskytuje jednoduchý príklad inicializácie poľa v čase kompilácie a manipulácie s ním.
Ukážka poľa ilustruje koncepciu polí – štruktúrovanej kolekcie prvkov, ktoré zdieľajú rovnaký dátový typ – a ako ich možno vytvárať, pristupovať a manipulovať s nimi pomocou programovacieho jazyka. V nasledujúcom príklade kódovania si ukážeme, ako inicializovať pole v čase kompilácie, vypočítať jeho veľkosť a vytlačiť prvky daného poľa. Pozrite si nasledujúci daný kód a prejdite na vysvetlenie:
#includepomocou menného priestoru std ;
int Hlavná ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int size_array = veľkosť arrayint / veľkosť ( int ) ;
cout << 'Dĺžka poľa je = ' << size_array << endl ;
cout << 'Prvky v poli sú = ' ;
pre ( int i = 0 ; i < size_array ; ++ i ) {
cout << arrayint [ i ] << ' ' ;
}
}
Tento program inicializuje pole constexpr, vypočíta jeho dĺžku v čase kompilácie a potom vytlačí dĺžku poľa a prvky do konzoly. Constexpr zabezpečuje, že pole a jeho vlastnosti sú určené v čase kompilácie. Poďme prelomiť kód a vysvetliť konkrétne podrobnosti jeden po druhom:
Na zahrnutie štandardnej knižnice vstupno-výstupného streamu, ktorá umožňuje použitie funkcií ako „cout“ pre výstup, sa volá #include
Slučka „for“ iteruje cez prvky poľa „arrayint[]“ a hodnoty sa potom vytlačia do konzoly. Pozrime sa na nasledujúci výstup daného kódu:
Záver
Zavedenie a evolúcia kľúčového slova constexpr v C++ spôsobili revolúciu v zaobchádzaní s konštantnými výrazmi a hodnotami. Tento článok skúmal tri praktické príklady, ktoré demonštrujú silu constexpru pri výpočte faktoriálov, počítaní malých písmen a inicializácii polí v čase kompilácie. Medzi hlavné prínosy patrí zvýšený výkon, skrátenie výpočtov za behu a lepšia efektivita pamäte. Constexpr je cenným prínosom pre vytváranie spoľahlivých, konštantných entít v rámci kódovej základne, zabezpečuje nemennosť a prispieva k efektívnejším a efektívnejším programom.