C++ Constexpr String Exempel

C Constexpr String Exempel



Den här artikeln kommer att diskutera om constexpr, ett anmärkningsvärt tillägg till programmeringsspråket C++ som introduceras i C++11 och förbättras ytterligare i C++14, och signalerar till kompilatorn att en variabel-, funktions- eller objektkonstruktor är en kompilerings- Tidskonstant. Det revolutionerade hur utvecklarna skapar och manipulerar konstanterna. Genom constexpr kan utvecklarna definiera de uttryck och värden som är oföränderliga och utvärderas under kompileringen snarare än vid körning. Den övergripande fördelen med att införliva constexpr i koden är dess garanti för beständighet.

Vad är användningen av C++ Constexpr-strängen?

Att använda constexpr kan leda till mer kompakta och optimerade körbara filer. Eftersom värdena bestäms i förväg av kompilatorn, kan de resulterande binärerna vara mindre i storlek, vilket ger en mer ekonomisk användning av systemresurser som i sin tur kan förbättra programvarans prestanda på olika plattformar. En speciell betydande fördel med denna funktion är minskningen den medför för körtidsberäkningarna. Eftersom värden beräknas under kompileringsprocessen närhelst det är möjligt, blir körtidsutvärderingen mindre nödvändig. Denna effektivitetsökning påskyndar inte bara genomförandet utan effektiviserar också den övergripande programverksamheten.

Exempel 1: Använda Constexpr i C++ för faktorberäkning

I det här exemplet kommer vi att använda constexpr som gör att beräkningarna kan utföras vid kompilering i stället för vid körning. I samband med beräkning av faktoral kan en vanlig matematisk operation, som är constexpr, utnyttjas för att beräkna faktorvärden under kompilering. Låt oss undersöka och granska följande kod och sedan titta på förklaringen av koden:







#include

constexpr int faktoriellt ( int n ) {

lämna tillbaka n <= 1 ? 1 : ( n * faktoriellt ( n - 1 ) ) ;

}

int huvud ( ) {

int på ett = 5 ;

std :: cout << 'faktoriell av' << på ett << ' = ' << faktoriellt ( på ett ) << std :: endl ;

}

Det givna kodexemplet demonstrerar användningen av constexpr för att beräkna faktorialen för ett tal på ett rekursivt sätt. Kompilatorn kan utvärdera det faktoriella uttrycket vid kompileringstid i det här exemplet eftersom faktorfunktionen deklareras och definieras med constexpr-specifikationen. Med hjälp av constexpr i ett C++-program utvärderar kompilatorn det faktoriella uttrycket av 5 vid kompileringstid, vilket eliminerar behovet av runtime-beräkning.



Låt oss nu se den detaljerade uppdelningen av koden med specifika detaljer och förklaringar.



Först använder vi #include för att införliva 'iostream'-huvudfilen som tillhandahåller viktiga in- och utdatafunktioner som 'std::cout' för utskrift till konsolen.





Efteråt går vi in ​​i funktionen factorial() (rekursiv) som är 'constexpr int factorial(int n)'. Denna factorial()-funktion definierar en rekursiv funktion som beräknar faktorialet för ett 'n' heltal. Constexpr innebär att prestandaoptimeringar kan bli resultatet av att utvärdera funktionen under kompileringen.

Avkastningen n <= 1 ? 1 : (n * factorial(n – 1)) linje använder ett villkorligt uttryck för rekursion som säger att om 'n' är mindre än eller lika med 1, returnerar det 1 (basfall). Om inte, gör den faktorberäkningen (n! = n * (n-1)!), som är den allmänna formeln för att beräkna faktorialen, genom att upprepade gånger anropa sig själv med 'n - 1' och sedan multiplicera resultatet med 'n ”. Dessa linjer fungerar som en gatekeeper för faktorberäkning. Den kontrollerar om numret är på basnivån och returnerar 1 i så fall. Om inte, startar det en kedjereaktion av funktionsanrop, som var och en arbetar på mindre siffror tills basfallet nås. Därefter multipliceras resultaten tillsammans i omvänd ordning. Följande är utdata från koden för din referens:



Exempel 2: Räkna de små bokstäverna som visar C++ Constexpr-strängen

Här kommer vi att lära oss hur man räknar antalet gemener med hjälp av en countexpr-sträng. I det här exemplet är syftet att räkna antalet gemener i en given sträng med hjälp av constexpr-funktionen för att minska körtidsberäkningen. Funktionen countLowercase(), deklarerad som constexpr, tar en 'string_view'-sträng som sin parameter och itererar genom varje tecken i den givna strängen som indata. För varje liten bokstav som vi stöter på, ökas antalet. Resultatet erhålls sedan vid kompileringstillfället eftersom funktionen arbetar på konstanta uttryck, vilket visar kompileringstidsutvärderingens effektivitet och prestandafördelar. Kontrollera först följande kod. Gå sedan vidare till den detaljerade förklaringen:

#include
#inkludera
använder namnutrymme std ;
constexpr storlek_t räkna Små bokstäver ( string_view s ) {
storlek_t räkna = 0 ;
för ( röding c : s ) {
om ( är lägre ( c ) ) {
räkna ++;
}
}
lämna tillbaka räkna ;
}
int huvud ( ) {
cout << 'Totalt små bokstäver i' Gemener 'är ='
<< räkna Små bokstäver ( 'Gemener' ) << endl ;
}

Här är en detaljerad uppdelning av koden med en förklaring av varje rad:

#include ingår för att använda standardin-/utgångsströmbiblioteket för att skriva ut meddelandena. #include inkluderar klassen 'string_view' för effektiv strängmanipulation.

I funktionen countLowercase() räknar funktionen 'constexpr size_t countlower(string_view s)' de små bokstäverna i en given strängvy. Int main() är programmets ingångspunkt som skriver ut ett meddelande som anger antalet gemener i 'Lower Case LETtErS' och anropar funktionen countLowercase() med 'Lower Case LETtErS' som indata och skriver ut resultatet. Se följande utdata från programmet:

Exempel 3: Array-demonstration genom att använda C++ Constexpr

En arraydemonstration visar hur arrayerna som är strukturerade samlingar av element av samma datatyp skapas, nås och manipuleras inom ett programmeringsspråk. I det följande kommer vi att förklara genom ett kodningsexempel där programmet ger ett enkelt exempel på initiering och manipulering av kompileringstidsmatriser.

En arraydemonstration illustrerar konceptet med arrayer – en strukturerad samling av element som delar samma datatyp – och hur de kan skapas, nås och manipuleras med hjälp av ett programmeringsspråk. I följande kodningsexempel kommer vi att visa hur man initierar en array vid kompilering, beräknar dess storlek och skriver ut elementen i den givna arrayen. Se följande givna kod och fortsätt till förklaringen:

#include
använder namnutrymme std ;
int huvud ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int size_array = storlek av arrayint / storlek av ( int ) ;
cout << 'Arrayens längd är = ' << size_array << endl ;
cout << 'Elementen i arrayen är = ' ;
för ( int i = 0 ; i < size_array ; ++ i ) {
cout << arrayint [ i ] << ' ' ;
}
}

Det här programmet initierar en constexpr-array, beräknar dess längd vid kompilering och skriver sedan ut arrayens längd och element till konsolen. Constexpr säkerställer att arrayen och dess egenskaper bestäms vid kompilering. Låt oss bryta koden och förklara de specifika detaljerna en efter en:

För att inkludera standardbiblioteket för input-outputström, vilket tillåter användning av funktioner som 'cout' för utdata, anropas #include . Programmet börjar köra från int main()-funktionen. Inom main()-funktionen är 'arrayint[]'-matrisen definierad, med en storlek på 9 med en constexpr int arrayint[9]-sats. Arrayen initieras med fem siffror, och de återstående elementen förblev implicit 0. Int length_a = sizeof arrayint / sizeof(int); beräknar storleken på 'arrayint' i byte.

En 'for'-loop itererar genom elementen i 'arrayint[]'-matrisen, och värdena skrivs sedan ut till konsolen. Låt oss se följande utdata av den givna koden:

Slutsats

Introduktionen och utvecklingen av nyckelordet constexpr i C++ har revolutionerat hur konstanta uttryck och värden hanteras. Den här artikeln undersökte tre praktiska exempel, som visade upp kraften hos constexpr vid beräkning av factorials, räknande av gemener och initialisering av arrayerna vid kompilering. De viktigaste fördelarna inkluderar förbättrad prestanda, minskade körtidsberäkningar och förbättrad minneseffektivitet. Constexpr är en värdefull tillgång för att skapa pålitliga, konstanta enheter inom en kodbas, vilket säkerställer oföränderlighet och bidrar till mer strömlinjeformade och effektiva program.