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
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
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:
#includebruger 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
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.