Příklady řetězců C++ Constexpr

Priklady Retezcu C Constexpr



Tento článek pojednává o constexpru, významném doplňku programovacího jazyka C++, který je představen v C++11 a dále vylepšen v C++14, a signalizuje kompilátoru, že konstruktor proměnné, funkce nebo objektu je kompilátor časová konstanta. Způsobil revoluci ve způsobu, jakým vývojáři vytvářejí a manipulují s konstantami. Prostřednictvím constexpr mohou vývojáři definovat výrazy a hodnoty, které jsou neměnné a vyhodnocované během kompilace spíše než za běhu. Hlavní výhodou začlenění constexpr do kódu je jeho záruka stálosti.

Jaké je použití řetězce C++ Constexpr?

Využití constexpr může vést ke kompaktnějším a optimalizovaným spustitelným souborům. Vzhledem k tomu, že hodnoty jsou předem určeny kompilátorem, výsledné binární soubory mohou mít menší velikost, což umožňuje ekonomičtější využití systémových prostředků, což zase může zvýšit výkon softwaru na různých platformách. Jednou ze zvláštních významných výhod této funkce je snížení, které přináší do výpočtů za běhu. Protože se hodnoty vypočítávají během procesu kompilace, kdykoli je to možné, vyhodnocení za běhu se stává méně nutným. Toto zvýšení efektivity nejen zrychluje provádění, ale také zefektivňuje celkové operace programu.

Příklad 1: Použití Constexpru v C++ pro výpočet faktoru

V tomto příkladu použijeme constexpr, který umožňuje provádět výpočty v době kompilace spíše než v době běhu. V kontextu výpočtu faktoriálů lze pro výpočet faktoriálů během kompilace využít běžnou matematickou operaci, kterou je constexpr. Pojďme prozkoumat a zkontrolovat následující kód a poté se podívat na vysvětlení kódu:







#include

constexpr int faktoriál ( int n ) {

vrátit se n <= 1 ? 1 : ( n * faktoriál ( n - 1 ) ) ;

}

int hlavní ( ) {

int na jednom = 5 ;

std :: cout << 'faktoriál' << na jednom << ' = ' << faktoriál ( na jednom ) << std :: endl ;

}

Uvedený příklad kódu demonstruje použití constexpr pro výpočet faktoriálu čísla rekurzivním způsobem. Kompilátor je v tomto příkladu schopen vyhodnotit faktoriálový výraz v době kompilace, protože faktoriální funkce je deklarována a definována se specifikátorem constexpr. Pomocí constexpr v programu C++ kompilátor vyhodnotí faktoriálový výraz 5 v době kompilace, čímž eliminuje potřebu výpočtů za běhu.



Nyní se podívejme na podrobný rozpis kódu s konkrétními detaily a vysvětleními.



Nejprve použijeme #include k začlenění souboru záhlaví „iostream“, který poskytuje základní vstupní a výstupní funkce, jako je „std::cout“ pro tisk na konzoli.





Poté přejdeme k funkci factorial() (rekurzivní), která je „constexpr int faktorial(int n)“. Tato funkce factorial() definuje rekurzivní funkci, která vypočítá faktoriál „n“ celého čísla. Constexpr znamená, že optimalizace výkonu může vyplynout z vyhodnocení funkce během kompilace.

Návrat n <= 1? 1 : (n * faktoriál(n – 1)) řádek používá podmíněný výraz pro rekurzi, který říká, že pokud je „n“ menší nebo rovno 1, vrátí 1 (základní případ). Pokud ne, provede výpočet faktoriálu (n! = n * (n-1)!), což je obecný vzorec pro výpočet faktoriálu, tím, že se opakovaně nazývá „n – 1“ a výsledek pak vynásobí „n“ “. Tyto řádky fungují jako vrátný pro faktoriální výpočet. Zkontroluje, zda je číslo na základní úrovni, a pokud ano, vrátí 1. Pokud ne, spustí řetězovou reakci volání funkcí, z nichž každé pracuje na menších číslech, dokud není dosaženo základního případu. Poté se výsledky vynásobí v opačném pořadí. Následuje výstup kódu pro vaši referenci:



Příklad 2: Počítání malých písmen Demonstrace řetězce C++ Constexpr

Zde se naučíme, jak spočítat počet malých písmen pomocí řetězce countexpr. V tomto příkladu je účelem spočítat počet malých písmen v daném řetězci pomocí funkce constexpr ke snížení běhového výpočtu. Funkce countLowercase(), deklarovaná jako constexpr, bere řetězec „string_view“ jako svůj parametr a iteruje každý znak daného řetězce jako vstup. Pro každé malé písmeno, se kterým se setkáme, se počet zvýší. Výsledek je pak získán v době kompilace, protože funkce pracuje s konstantními výrazy, což ukazuje efektivitu a výkonnost vyhodnocení v době kompilace. Nejprve zkontrolujte následující kód. Poté přejděte k podrobnému vysvětlení:

#include
#include
pomocí jmenného prostoru std ;
constexpr velikost_t počítat Malá písmena ( string_view s ) {
velikost_t počet = 0 ;
pro ( char C : s ) {
-li ( nižší ( C ) ) {
počet ++;
}
}
vrátit se počet ;
}
int hlavní ( ) {
cout << 'Celkový počet malých písmen v ' Malá písmena 'jsou ='
<< počítat Malá písmena ( 'Malá písmena' ) << endl ;
}

Zde je podrobný rozpis kódu s vysvětlením každého řádku:

#include je zahrnut pro použití standardní knihovny vstupních/výstupních streamů k tisku zpráv. #include obsahuje třídu „string_view“ pro efektivní manipulaci s řetězci.

Ve funkci countLowercase() počítá funkce „constexpr size_t countlower(string_view s)“ malá písmena v daném zobrazení řetězce. Int main() je vstupním bodem programu, který vytiskne zprávu, která udává počet malých písmen v „menších písmenech“ a zavolá funkci countLowercase() se vstupem „malá písmena“ a vytiskne výsledek. Podívejte se na následující výstup programu:

Příklad 3: Demonstrace pole s využitím C++ Constexpr

Ukázka pole ukazuje, jak jsou pole, která jsou strukturovanými kolekcemi prvků stejného datového typu, vytvářena, zpřístupňována a manipulována v rámci programovacího jazyka. V následujícím textu vysvětlíme pomocí příkladu kódování, ve kterém program poskytuje jednoduchý příklad inicializace pole v době kompilace a manipulace s ním.

Ukázka pole ilustruje koncept polí – strukturované kolekce prvků, které sdílejí stejný datový typ – a jak je lze vytvářet, přistupovat a manipulovat s nimi pomocí programovacího jazyka. V následujícím příkladu kódování si ukážeme, jak inicializovat pole v době kompilace, vypočítat jeho velikost a vytisknout prvky daného pole. Podívejte se na následující daný kód a přejděte k vysvětlení:

#include
pomocí jmenného prostoru std ;
int hlavní ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int size_array = velikost arrayint / velikost ( int ) ;
cout << 'Délka pole je =' << size_array << endl ;
cout << 'Prvky v poli jsou = ' ;
pro ( int i = 0 ; i < size_array ; ++ i ) {
cout << arrayint [ i ] << ' ' ;
}
}

Tento program inicializuje pole constexpr, vypočítá jeho délku v době kompilace a poté vytiskne délku pole a prvky do konzole. Constexpr zajišťuje, že pole a jeho vlastnosti jsou určeny v době kompilace. Pojďme prolomit kód a vysvětlit konkrétní podrobnosti jeden po druhém:

Pro zahrnutí standardní knihovny vstupně-výstupních streamů, která umožňuje použití funkcí jako „cout“ pro výstup, se zavolá #include . Program zahájí provádění z funkce int main(). V rámci funkce main() je definováno pole „arrayint[]“ o velikosti 9 s příkazem constexpr int arrayint[9]. Pole je inicializováno pěti čísly a zbývající prvky implicitně zůstaly 0. Int length_a = sizeof arrayint / sizeof(int); vypočítá velikost „pole“ v bajtech.

Smyčka „for“ prochází prvky pole „arrayint[]“ a hodnoty jsou poté vytištěny na konzoli. Podívejme se na následující výstup daného kódu:

Závěr

Zavedení a evoluce klíčového slova constexpr v C++ způsobilo revoluci v tom, jak se zachází s konstantními výrazy a hodnotami. Tento článek prozkoumal tři praktické příklady, které demonstrují sílu constexpru při počítání faktoriálů, počítání malých písmen a inicializaci polí při kompilaci. Mezi hlavní přínosy patří zvýšený výkon, snížená doba běhu výpočtů a zlepšená efektivita paměti. Constexpr je cenným aktivem pro vytváření spolehlivých, konstantních entit v kódové základně, zajišťuje neměnnost a přispívá k efektivnějšímu a efektivnějšímu programu.