Eksempler på C++ Constexpr-strenge

Eksempler Pa C Constexpr Strenge



Denne artikel vil diskutere om constexpr, en bemærkelsesværdig tilføjelse til C++ programmeringssproget, der introduceres i C++11 og forbedres yderligere i C++14, og signalerer til compileren, at en variabel-, funktions- eller objektkonstruktør er en kompilerings- tidskonstant. Det revolutionerede den måde, udviklerne skaber og manipulerer konstanterne på. Gennem constexpr kan udviklerne definere de udtryk og værdier, der er uforanderlige og evalueres under kompileringen i stedet for under kørsel. Den overordnede fordel ved at inkorporere constexpr i koden er dens garanti for konstanthed.

Hvad er brugen af ​​C++ Constexpr-strengen?

Brug af constexpr kan føre til mere kompakte og optimerede eksekverbare filer. Da værdierne er bestemt på forhånd af compileren, kan de resulterende binære filer være mindre i størrelse, hvilket realiserer en mere økonomisk brug af systemressourcer, hvilket igen kan forbedre softwarens ydeevne på forskellige platforme. En særlig væsentlig fordel ved denne funktion er den reduktion, den medfører for runtime-beregningerne. Da værdier beregnes under kompileringsprocessen, når det er muligt, bliver runtime-evalueringen mindre nødvendig. Dette effektivitetsboost accelererer ikke kun udførelsen, men strømliner også den overordnede programoperation.

Eksempel 1: Brug af Constexpr i C++ til faktorberegning

I dette eksempel bruger vi constexpr, som gør det muligt at udføre beregningerne på kompileringstidspunktet snarere end ved run-time. I forbindelse med beregning af factorials kan en almindelig matematisk operation, som er constexpr, udnyttes til at beregne faktorielle værdier under kompilering. Lad os undersøge og gennemgå følgende kode og derefter se på forklaringen af ​​koden:







#include

constexpr int faktorielle ( int n ) {

Vend tilbage n <= 1 ? 1 : ( n * faktorielle ( n - 1 ) ) ;

}

int vigtigste ( ) {

int på en = 5 ;

std :: cout << 'Faktoren af' << på en << ' = ' << faktorielle ( på en ) << std :: endl ;

}

Det givne kodeeksempel demonstrerer brugen af ​​constexpr til at beregne fakultetet af et tal på en rekursiv måde. Compileren er i stand til at evaluere det faktorielle udtryk på kompileringstidspunktet i dette eksempel, fordi den faktorielle funktion er erklæret og defineret med constexpr-specifikationen. Ved at bruge constexpr i et C++-program evaluerer compileren det faktorielle udtryk for 5 på kompileringstidspunktet, hvilket eliminerer behovet for runtime-beregning.



Lad os nu se den detaljerede opdeling af koden med specifikke detaljer og forklaringer.



Først bruger vi #include til at inkorporere 'iostream'-header-filen, som giver vigtige input- og outputfunktioner som 'std::cout' til udskrivning til konsollen.





Bagefter går vi ind i funktionen factorial() (rekursiv), som er 'constexpr int factorial(int n)'. Denne factorial() funktion definerer en rekursiv funktion, der beregner fakulteten af ​​et 'n' heltal. Constexpr indebærer, at ydelsesoptimeringer kan være resultatet af evaluering af funktionen under kompilering.

Afkastet n <= 1 ? 1 : (n * faktoriel(n – 1)) linie anvender et betinget udtryk for rekursion, som angiver, at hvis 'n' er mindre end eller lig med 1, returnerer det 1 (grundfald). Hvis ikke, udfører den faktorberegningen (n! = n * (n-1)!), som er den generelle formel for beregning af faktoren, ved gentagne gange at kalde sig selv med 'n - 1' og derefter gange resultatet med 'n ”. Disse linjer fungerer som en gatekeeper til faktorberegning. Den tjekker, om tallet er på basisniveauet og returnerer 1, hvis det er tilfældet. Hvis ikke, starter det en kædereaktion af funktionskald, der hver arbejder på mindre tal, indtil grundsagen er nået. Derefter ganges resultaterne sammen i omvendt rækkefølge. Følgende er outputtet af koden til din reference:



Eksempel 2: Optælling af små bogstaver, der viser C++ Constexpr-strengen

Her lærer vi, hvordan man tæller antallet af små bogstaver ved hjælp af en countexpr-streng. I dette eksempel er formålet at tælle antallet af små bogstaver i en given streng ved hjælp af constexpr-funktionen for at reducere runtime-beregningen. Funktionen countLowercase(), erklæret som constexpr, tager en 'string_view'-streng som sin parameter og itererer gennem hvert tegn i den givne streng som input. For hvert lille bogstav, vi støder på, øges antallet. Resultatet opnås derefter på kompileringstidspunktet, da funktionen opererer på konstante udtryk, der viser kompileringstidsevalueringens effektivitet og ydeevnefordele. Tjek først følgende kode. Gå derefter videre til den detaljerede forklaring:

#include
#include
bruger navneområde std ;
constexpr størrelse_t tæl Små bogstaver ( string_view s ) {
størrelse_t tælle = 0 ;
til ( char c : s ) {
hvis ( er lavere ( c ) ) {
tælle ++;
}
}
Vend tilbage tælle ;
}
int vigtigste ( ) {
cout << 'Små bogstaver i alt i' Små bogstaver 'er ='
<< tæl Små bogstaver ( 'Små bogstaver' ) << endl ;
}

Her er en detaljeret opdeling af koden med en forklaring af hver linje:

#include er inkluderet for at bruge standard input/output stream-biblioteket til at udskrive meddelelserne. #include inkluderer klassen 'string_view' for effektiv strengmanipulation.

I funktionen countLowercase() tæller funktionen 'constexpr size_t countlower(string_view s)' de små bogstaver i en given strengvisning. int main() er programmets indgangspunkt, der udskriver en besked, der angiver antallet af små bogstaver i 'Små bogstaver' og kalder funktionen countLowercase() med 'Små bogstaver' som input og udskriver resultatet. Se følgende output fra programmet:

Eksempel 3: Array-demonstration ved at bruge C++ Constexpr

En array-demonstration viser, hvordan arrays, der er strukturerede samlinger af elementer af samme datatype, oprettes, tilgås og manipuleres i et programmeringssprog. I det følgende vil vi forklare gennem et kodningseksempel, hvor programmet giver et simpelt eksempel på compile-time array initialisering og manipulation.

En array-demonstration illustrerer konceptet med arrays - en struktureret samling af elementer, der deler den samme datatype - og hvordan de kan oprettes, tilgås og manipuleres ved hjælp af et programmeringssprog. I det følgende kodningseksempel vil vi demonstrere, hvordan man initialiserer et array på kompileringstidspunktet, beregner dets størrelse og udskriver elementerne i det givne array. Se følgende givne kode og fortsæt til forklaringen:

#include
bruger navneområde std ;
int vigtigste ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int size_array = størrelse af arrayint / størrelse af ( int ) ;
cout << 'Arrayets længde er = ' << size_array << endl ;
cout << 'Elementerne i array er = ' ;
til ( int jeg = 0 ; jeg < size_array ; ++ jeg ) {
cout << arrayint [ jeg ] << ' ' ;
}
}

Dette program initialiserer et constexpr-array, beregner dets længde på kompileringstidspunktet og udskriver derefter arrayets længde og elementer til konsollen. Constexpr sikrer, at arrayet og dets egenskaber bestemmes på kompileringstidspunktet. Lad os bryde koden og forklare de specifikke detaljer én efter én:

For at inkludere standard input-output stream-biblioteket, der tillader brugen af ​​funktioner som 'cout' til output, kaldes #include . Programmet starter udførelsen fra int main()-funktionen. Inden for main()-funktionen er 'arrayint[]'-arrayet defineret med en størrelse på 9 med en constexpr int arrayint[9]-sætning. Arrayet initialiseres med fem tal, og de resterende elementer forblev implicit 0. Int length_a = sizeof arrayint / sizeof(int); beregner størrelsen af ​​'arrayint' i bytes.

En 'for'-løkke itererer gennem elementerne i 'arrayint[]'-arrayet, og værdierne udskrives derefter til konsollen. Lad os se følgende output af den givne kode:

Konklusion

Introduktionen og udviklingen af ​​nøgleordet constexpr i C++ har revolutioneret, hvordan konstante udtryk og værdier håndteres. Denne artikel undersøgte tre praktiske eksempler, der viste styrken af ​​constexpr i beregning af factorials, optælling af små bogstaver og initialisering af arrays på kompileringstidspunktet. De vigtigste ting inkluderer forbedret ydeevne, reducerede runtime-beregninger og forbedret hukommelseseffektivitet. Constexpr er et værdifuldt aktiv til at skabe pålidelige, konstante enheder inden for en kodebase, hvilket sikrer uforanderlighed og bidrager til mere strømlinede og effektive programmer.