C++ Constexpr-merkkijonoesimerkkejä

C Constexpr Merkkijonoesimerkkeja



Tässä artikkelissa käsitellään constexpr-kieltä, joka on merkittävä lisäys C++-ohjelmointikieleen, joka otetaan käyttöön C++11:ssä ja jota on parannettu edelleen C++14:ssä. aikavakio. Se mullisti tavan, jolla kehittäjät luovat ja käsittelevät vakioita. Constexprin avulla kehittäjät voivat määrittää lausekkeet ja arvot, jotka ovat muuttumattomia ja jotka arvioidaan kääntämisen aikana ajon aikana. Constexprin sisällyttämisen koodiin ylivoimainen etu on sen jatkuvuuden takuu.

Mikä on C++ Constexpr -merkkijonon käyttö?

Constexprin käyttäminen voi johtaa kompaktimpiin ja optimoituihin suoritettaviin tiedostoihin. Koska kääntäjä määrittää arvot etukäteen, tuloksena olevat binaarit voivat olla kooltaan pienempiä, mikä mahdollistaa järjestelmäresurssien taloudellisemman käytön, mikä puolestaan ​​voi parantaa ohjelmiston suorituskykyä eri alustoilla. Yksi tämän ominaisuuden erityinen merkittävä etu on ajonaikaisten laskelmien vähentäminen. Koska arvot lasketaan käännösprosessin aikana aina kun se on mahdollista, ajonaikainen arviointi tulee vähemmän tarpeelliseksi. Tämä tehokkuuden lisäys ei vain nopeuttaa suoritusta, vaan myös virtaviivaistaa ohjelman yleistä toimintaa.

Esimerkki 1: Constexprin käyttö C++:ssa tekijälaskennassa

Tässä esimerkissä käytämme constexpr-komentoa, joka sallii laskelmien suorittamisen käännösaikana ajon aikana. Tekijänarvojen laskemisen yhteydessä yleistä matemaattista operaatiota, joka on constexpr, voidaan hyödyntää kertoimien arvojen laskemiseen käännöksen aikana. Tarkastellaan ja tarkastellaan seuraavaa koodia ja katsotaan sitten koodin selitystä:







#include

constexpr int tekijällinen ( int n ) {

palata n <= 1 ? 1 : ( n * tekijällinen ( n - 1 ) ) ;

}

int pää ( ) {

int yhdellä = 5 ;

std :: cout << 'Factory of' << yhdellä << '=' << tekijällinen ( yhdellä ) << std :: endl ;

}

Annettu koodiesimerkki havainnollistaa constexpr:n käyttöä luvun kertoimen laskemiseen rekursiivisella tavalla. Kääntäjä pystyy arvioimaan tekijälausekkeen käännöshetkellä tässä esimerkissä, koska tekijäfunktio on ilmoitettu ja määritelty constexpr-määritteen avulla. Käyttämällä constexpr-komentoa C++-ohjelmassa kääntäjä arvioi tekijälausekkeen 5 käännöshetkellä, mikä eliminoi ajonaikaisen laskennan tarpeen.



Katsokaamme nyt koodin yksityiskohtainen erittely erityisillä yksityiskohdilla ja selityksillä.



Ensin käytämme #include sisällyttääksemme 'iostream'-otsikkotiedoston, joka tarjoaa tärkeitä syöttö- ja tulostustoimintoja, kuten 'std::cout' tulostettaessa konsoliin.





Myöhemmin siirrymme factorial()-funktioon (rekursiivinen), joka on 'constexpr int factorial(int n)'. Tämä factorial()-funktio määrittää rekursiivisen funktion, joka laskee 'n' kokonaisluvun faktoriaalin. Constexpr tarkoittaa, että suorituskyvyn optimointi voi johtua funktion arvioinnista kääntämisen aikana.

Palautus n <= 1 ? 1 : (n * factorial(n – 1)) -rivi käyttää ehdollista lauseketta rekursiolle, joka sanoo, että jos 'n' on pienempi tai yhtä suuri kuin 1, se palauttaa arvon 1 (perustapaus). Jos ei, se suorittaa kertoimen laskennan (n! = n * (n-1)!), joka on yleinen kaava faktoriaalin laskemiselle, kutsumalla itseään toistuvasti 'n – 1':llä ja kertomalla tuloksen sitten 'n:llä' ”. Nämä rivit toimivat kuin portinvartija tekijälaskussa. Se tarkistaa, onko numero perustasolla ja palauttaa 1, jos on. Jos ei, se käynnistää funktiokutsujen ketjureaktion, joista jokainen työskentelee pienemmillä numeroilla, kunnes perustapaus saavutetaan. Sitten tulokset kerrotaan yhteen käänteisessä järjestyksessä. Seuraava on koodin tulos viitteellesi:



Esimerkki 2: C++ Constexpr-merkkijonon osoittavien pienten kirjainten laskeminen

Täällä opimme laskemaan pienten kirjainten määrän käyttämällä countexpr-merkkijonoa. Tässä esimerkissä tarkoituksena on laskea pienten kirjainten määrä tietyssä merkkijonossa käyttämällä constexpr-ominaisuutta ajonaikaisen laskennan vähentämiseksi. countLowercase()-funktio, joka on ilmoitettu constexpr, ottaa 'string_view'-merkkijonon parametriksi ja iteroi syötteenä annetun merkkijonon jokaisen merkin läpi. Jokaisen kohtaamamme pienen kirjaimen määrä kasvaa. Tulos saadaan sitten käännösaikana, kun funktio toimii vakiolausekkeilla, mikä osoittaa käännösajan arvioinnin tehokkuuden ja suorituskyvyn edut. Tarkista ensin seuraava koodi. Siirry sitten yksityiskohtaiseen selvitykseen:

#include
#include
käyttäen nimiavaruutta std ;
constexpr koko_t countPienet kirjaimet ( string_view s ) {
koko_t Kreivi = 0 ;
varten ( hiiltyä c : s ) {
jos ( matalampi ( c ) ) {
Kreivi ++;
}
}
palata Kreivi ;
}
int pää ( ) {
cout << 'pieniä kirjaimia yhteensä' Pienet kirjaimet 'ovat ='
<< countPienet kirjaimet ( 'Pienet kirjaimet' ) << endl ;
}

Tässä on koodin yksityiskohtainen erittely ja kunkin rivin selitys:

#include on mukana, jotta voit tulostaa viestit tavallisen syöttö/tulostusvirtakirjaston avulla. #include sisältää 'string_view'-luokan merkkijonojen tehokasta käsittelyä varten.

countLowercase()-funktiossa 'constexpr size_t countlower(string_view s)' -funktio laskee pienet kirjaimet tietyssä merkkijononäkymässä. int main() on ohjelman aloituskohta, joka tulostaa viestin, joka ilmoittaa pienten kirjainten lukumäärän 'pienet kirjaimet' ja kutsuu count Lowercase() -funktiota 'pienet kirjaimet' syötteenä ja tulostaa tuloksen. Katso seuraava ohjelman tulos:

Esimerkki 3: Array-esittely käyttämällä C++ Constexpr

Taulukkoesittely näyttää, kuinka taulukoita, jotka ovat saman tietotyypin elementtien strukturoituja kokoelmia, luodaan, käytetään ja käsitellään ohjelmointikielellä. Seuraavassa selitämme koodausesimerkin avulla, jossa ohjelma tarjoaa yksinkertaisen esimerkin käännösajan taulukon alustamisesta ja käsittelystä.

Taulukkoesittely havainnollistaa taulukoiden käsitettä – jäsenneltyä kokoelmaa elementtejä, joilla on sama tietotyyppi – ja kuinka niitä voidaan luoda, käyttää ja käsitellä ohjelmointikielellä. Seuraavassa koodausesimerkissä näytämme, kuinka taulukko alustetaan käännöshetkellä, lasketaan sen koko ja tulostetaan annetun taulukon elementit. Katso seuraava annettu koodi ja siirry selostukseen:

#include
käyttäen nimiavaruutta std ;
int pää ( ) {
constexpr int arrayint [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int koko_taulukko = koko arrayint / koko ( int ) ;
cout << 'Matriisin pituus on =' << koko_taulukko << endl ;
cout << 'Matriisin elementit ovat =' ;
varten ( int i = 0 ; i < koko_taulukko ; ++ i ) {
cout << arrayint [ i ] << '' ;
}
}

Tämä ohjelma alustaa constexpr-taulukon, laskee sen pituuden käännöshetkellä ja tulostaa sitten taulukon pituuden ja elementit konsoliin. Constexpr varmistaa, että taulukko ja sen ominaisuudet määritetään käännöshetkellä. Puretaan koodi ja selitetään yksityiskohdat yksitellen:

Jos haluat sisällyttää vakiotulo-tulostusvirtakirjaston, joka sallii funktioiden, kuten 'cout' käytön, ulostulossa, kutsutaan #include . Ohjelma aloittaa suorituksen int main()-funktiosta. Main()-funktiossa määritellään 'arrayint[]'-taulukko, jonka koko on 9 constexpr int arrayint[9] -käskyllä. Taulukko alustetaan viidellä numerolla, ja loput elementit pysyivät implisiittisesti 0:na. Int pituus_a = taulukon koko / koko(int); laskee 'taulukon' koon tavuina.

'For'-silmukka toistuu 'arrayint[]'-taulukon elementtien läpi, ja arvot tulostetaan sitten konsoliin. Katsotaanpa seuraava annetun koodin tulos:

Johtopäätös

Constexpr-avainsanan käyttöönotto ja kehitys C++:ssa ovat mullistaneet vakiolausekkeiden ja arvojen käsittelyn. Tässä artikkelissa tutkittiin kolmea käytännön esimerkkiä, jotka esittelevät constexprin tehoa kertoimien laskemisessa, pienten kirjainten laskemisessa ja taulukoiden alustamisessa käännöshetkellä. Tärkeimmät ominaisuudet sisältävät tehostetun suorituskyvyn, lyhennetyt ajonaikalaskelmat ja parannettu muistin tehokkuus. Constexpr on arvokas voimavara luotettavien, pysyvien kokonaisuuksien luomiseen koodikannassa, mikä varmistaa muuttumattomuuden ja edistää virtaviivaisempia ja tehokkaampia ohjelmia.