C++ Constexpr-strengeksempler

C Constexpr Strengeksempler



Denne artikkelen vil diskutere om constexpr, et bemerkelsesverdig tillegg til C++ programmeringsspråket som er introdusert i C++11 og forbedret ytterligere i C++14, og signaliserer til kompilatoren at en variabel-, funksjons- eller objektkonstruktør er en kompilerings- tidskonstant. Det revolusjonerte måten utviklerne skaper og manipulerer konstantene på. Gjennom constexpr kan utviklerne definere uttrykk og verdier som er uforanderlige og evaluert under kompileringen i stedet for under kjøring. Den overordnede fordelen med å inkorporere constexpr i koden er garantien for konstans.

Hva er bruken av C++ Constexpr-strengen?

Bruk av constexpr kan føre til mer kompakte og optimaliserte kjørbare filer. Siden verdiene bestemmes på forhånd av kompilatoren, kan de resulterende binære filene være mindre i størrelse, og realisere en mer økonomisk bruk av systemressurser som igjen kan forbedre ytelsen til programvaren på ulike plattformer. En spesiell betydelig fordel med denne funksjonen er reduksjonen den gir til kjøretidsberegningene. Ettersom verdier beregnes under kompileringsprosessen når det er mulig, blir kjøretidsevalueringen mindre nødvendig. Denne effektivitetsøkningen akselererer ikke bare utførelsen, men effektiviserer også den generelle programoperasjonen.

Eksempel 1: Bruk av Constexpr i C++ for faktorberegning

I dette eksemplet bruker vi constexpr som gjør at beregningene kan utføres på kompileringstidspunkt i stedet for på kjøretid. I sammenheng med beregning av faktorialer, kan en vanlig matematisk operasjon, som er constexpr, utnyttes for å beregne faktorverdier under kompilering. La oss undersøke og gjennomgå følgende kode og deretter se på forklaringen av koden:







#include

constexpr int faktoriell ( int n ) {

komme tilbake n <= 1 ? 1 : ( n * faktoriell ( n - 1 ) ) ;

}

int hoved- ( ) {

int på en = 5 ;

std :: cout << 'Faktisk av' << på en << ' = ' << faktoriell ( på en ) << std :: endl ;

}

Det gitte kodeeksemplet demonstrerer bruken av constexpr for å beregne faktorialet til et tall på en rekursiv måte. Kompilatoren er i stand til å evaluere det faktorielle uttrykket på kompileringstidspunktet i dette eksemplet fordi faktorialfunksjonen er deklarert og definert med constexpr-spesifikasjonen. Ved å bruke constexpr i et C++-program, evaluerer kompilatoren det faktorielle uttrykket på 5 ved kompilering, og eliminerer behovet for kjøretidsberegning.



La oss nå se den detaljerte sammenbruddet av koden med spesifikke detaljer og forklaringer.



Først bruker vi #include for å inkorporere 'iostream'-overskriftsfilen som gir viktige input- og output-funksjoner som 'std::cout' for utskrift til konsollen.





Etterpå går vi inn i factorial()-funksjonen (rekursiv) som er 'constexpr int factorial(int n)'. Denne factorial()-funksjonen definerer en rekursiv funksjon som beregner faktorialet til et 'n' heltall. Constexpr innebærer at ytelsesoptimaliseringer kan være resultatet av å evaluere funksjonen under kompilering.

Avkastningen n <= 1 ? 1 : (n * faktoriell(n – 1)) linje bruker et betinget uttrykk for rekursjon som sier at hvis 'n' er mindre enn eller lik 1, returnerer den 1 (grunntilfelle). Hvis ikke, utfører den faktorberegningen (n! = n * (n-1)!), som er den generelle formelen for å beregne faktoren, ved å gjentatte ganger kalle seg selv med 'n - 1' og deretter multiplisere resultatet med 'n '. Disse linjene fungerer som en gatekeeper for faktorberegning. Den sjekker om tallet er på basisnivået og returnerer 1 i så fall. Hvis ikke, starter det en kjedereaksjon av funksjonsanrop, som hver arbeider med mindre tall til grunntilfellet er nådd. Deretter multipliseres resultatene sammen i omvendt rekkefølge. Følgende er utdata fra koden for din referanse:



Eksempel 2: Telling av små bokstaver som viser C++ Constexpr-strengen

Her vil vi lære hvordan du teller antall små bokstaver ved hjelp av en countexpr-streng. I dette eksemplet er formålet å telle antall små bokstaver i en gitt streng ved å bruke constexpr-funksjonen for å redusere kjøretidsberegningen. countLowercase()-funksjonen, erklært som constexpr, tar en 'string_view'-streng som parameter og itererer gjennom hvert tegn i den gitte strengen som input. For hver liten bokstav vi møter, økes antallet. Resultatet oppnås deretter på kompileringstidspunktet ettersom funksjonen opererer på konstante uttrykk, og viser kompileringstidsevalueringens effektivitet og ytelsesfordeler. Sjekk først følgende kode. Gå deretter videre til den detaljerte forklaringen:

#include
#include
bruker navneområde std ;
constexpr størrelse_t telle Små bokstaver ( string_view s ) {
størrelse_t telle = 0 ;
til ( røye c : s ) {
hvis ( er lavere ( c ) ) {
telle ++;
}
}
komme tilbake telle ;
}
int hoved- ( ) {
cout << 'Totalt små bokstaver i' Små bokstaver 'er = '
<< telle Små bokstaver ( 'Små bokstaver' ) << endl ;
}

Her er en detaljert oversikt over koden med en forklaring av hver linje:

#include er inkludert for å bruke standard input/output stream-biblioteket til å skrive ut meldingene. #include inkluderer 'string_view'-klassen for effektiv strengmanipulasjon.

I funksjonen countLowercase() teller 'constexpr size_t countlower(string_view s)'-funksjonen små bokstaver i en gitt strengvisning. int main() er programmets inngangspunkt som skriver ut en melding som angir antall små bokstaver i 'Små bokstaver' og kaller opp funksjonen countLowercase() med 'Små bokstaver' som inndata og skriver ut resultatet. Se følgende utgang av programmet:

Eksempel 3: Array-demonstrasjon ved å bruke C++ Constexpr

En array-demonstrasjon viser hvordan arrayene som er strukturerte samlinger av elementer av samme datatype opprettes, får tilgang til og manipuleres i et programmeringsspråk. I det følgende vil vi forklare gjennom et kodeeksempel der programmet gir et enkelt eksempel på initialisering og manipulering av kompileringstidsmatriser.

En array-demonstrasjon illustrerer konseptet med arrays – en strukturert samling av elementer som deler samme datatype – og hvordan de kan opprettes, få tilgang til og manipuleres ved hjelp av et programmeringsspråk. I følgende kodeeksempel vil vi demonstrere hvordan du initialiserer en matrise ved kompilering, beregner størrelsen og skriver ut elementene i den gitte matrisen. Se følgende gitte kode og fortsett til forklaringen:

#include
bruker navneområde std ;
int hoved- ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int size_array = størrelsen av arrayint / størrelsen av ( int ) ;
cout << 'Arrayens lengde er = ' << size_array << endl ;
cout << 'Elementene i matrisen er = ' ;
til ( int Jeg = 0 ; Jeg < size_array ; ++ Jeg ) {
cout << arrayint [ Jeg ] << ' ' ;
}
}

Dette programmet initialiserer en constexpr-matrise, beregner lengden på kompileringstidspunktet, og skriver deretter ut matrisens lengde og elementer til konsollen. Constexpr sikrer at matrisen og dens egenskaper bestemmes på kompileringstidspunktet. La oss bryte koden og forklare de spesifikke detaljene én etter én:

For å inkludere standard input-output stream-biblioteket, som tillater bruk av funksjoner som 'cout' for output, kalles #include . Programmet starter kjøringen fra funksjonen int main(). Innenfor main()-funksjonen er 'arrayint[]'-matrisen definert, med en størrelse på 9 med en constexpr int arrayint[9]-setning. Arrayen initialiseres med fem tall, og de gjenværende elementene forble implisitt 0. Int length_a = sizeof arrayint / sizeof(int); beregner størrelsen på 'arrayint' i byte.

En 'for'-løkke itererer gjennom elementene i 'arrayint[]'-matrisen, og verdiene skrives deretter ut til konsollen. La oss se følgende utgang av den gitte koden:

Konklusjon

Introduksjonen og utviklingen av nøkkelordet constexpr i C++ har revolusjonert hvordan konstante uttrykk og verdier håndteres. Denne artikkelen utforsket tre praktiske eksempler, som viste frem kraften til constexpr i databehandling av faktorialer, telling av små bokstaver og initialisering av matrisene ved kompilering. De viktigste fordelene inkluderer forbedret ytelse, reduserte kjøretidsberegninger og forbedret minneeffektivitet. Constexpr er en verdifull ressurs for å skape pålitelige, konstante enheter i en kodebase, som sikrer uforanderlighet og bidrar til mer strømlinjeformede og effektive programmer.