Príklady reťazcov C++ Constexpr

Priklady Retazcov C Constexpr



Tento článok bude diskutovať o constexpr, pozoruhodnom doplnku k programovaciemu jazyku C++, ktorý je zavedený v C++11 a ďalej vylepšený v C++14, a signalizuje kompilátoru, že konštruktor premennej, funkcie alebo objektu je kompilátor časová konštanta. Spôsobil revolúciu v spôsobe, akým vývojári vytvárajú a manipulujú s konštantami. Prostredníctvom constexpr môžu vývojári definovať výrazy a hodnoty, ktoré sú nemenné a vyhodnocované počas kompilácie, a nie za behu. Hlavnou výhodou začlenenia constexpr do kódu je jeho záruka stálosti.

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 na začlenenie súboru hlavičky „iostream“, ktorý poskytuje základné vstupné a výstupné funkcie, ako napríklad „std::cout“ na tlač na konzole.





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 je zahrnutý na použitie štandardnej knižnice vstupných/výstupných streamov na tlač správ. #include obsahuje triedu “string_view” pre efektívnu manipuláciu s reťazcami.

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:

#include
pomocou 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 . Program začína vykonávanie z funkcie int main(). V rámci funkcie main() je definované pole „arrayint[]“ s veľkosťou 9 s príkazom constexpr int arrayint[9]. Pole je inicializované piatimi číslami a zostávajúce prvky implicitne zostali 0. Int dĺžka_a = sizeof arrayint / sizeof(int); vypočíta veľkosť „pola“ v bajtoch.

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.