C++ Constexpr Dizesi Örnekleri

C Constexpr Dizesi Ornekleri



Bu makalede, C++11'de tanıtılan ve C++14'te daha da geliştirilen, C++ programlama diline dikkate değer bir eklenti olan constexpr hakkında tartışılacak ve derleyiciye bir değişkenin, işlevin veya nesne yapıcısının bir derleme olduğu sinyali verilecektir. zaman sabiti. Geliştiricilerin sabitleri oluşturma ve değiştirme biçiminde devrim yarattı. Geliştiriciler constexpr aracılığıyla değişmez olan ve çalışma zamanı yerine derleme sırasında değerlendirilen ifadeleri ve değerleri tanımlayabilir. Constexpr'ı koda dahil etmenin en önemli faydası, tutarlılığın garantisidir.

C++ Constexpr Dizesinin Kullanımı Nedir?

Constexpr'ın kullanılması daha kompakt ve optimize edilmiş yürütülebilir dosyalara yol açabilir. Değerler derleyici tarafından önceden belirlendiğinden, ortaya çıkan ikili dosyaların boyutu daha küçük olabilir, bu da sistem kaynaklarının daha ekonomik kullanımını sağlar ve bu da yazılımın çeşitli platformlardaki performansını artırabilir. Bu özelliğin özel ve önemli bir avantajı, çalışma zamanı hesaplamalarında getirdiği azalmadır. Değerler derleme işlemi sırasında uygun olduğu durumlarda hesaplandığından, çalışma zamanı değerlendirmesi daha az gerekli hale gelir. Bu verimlilik artışı yalnızca yürütmeyi hızlandırmakla kalmaz, aynı zamanda genel program operasyonlarını da kolaylaştırır.

Örnek 1: Faktöriyel Hesaplama için C++'da Constexpr'ı kullanma

Bu örnekte, hesaplamaların çalışma zamanı yerine derleme zamanında yapılmasına izin veren constexpr'ı kullanacağız. Faktöriyellerin hesaplanması bağlamında, derleme sırasında faktöriyel değerleri hesaplamak için ortak bir matematiksel işlem olan constexpr'den yararlanılabilir. Aşağıdaki kodu inceleyip gözden geçirelim ve ardından kodun açıklamasına bakalım:







#include

constexpr int faktöriyel ( int N ) {

geri dönmek N <= 1 ? 1 : ( N * faktöriyel ( N - 1 ) ) ;

}

int ana ( ) {

int birde = 5 ;

std :: cout << 'Faktöriyel' << birde << ' = ' << faktöriyel ( birde ) << std :: sonunda ;

}

Verilen kod örneği, bir sayının faktöriyelini yinelemeli bir şekilde hesaplamak için constexpr'ın kullanımını göstermektedir. Bu örnekte derleyici, faktöriyel ifadeyi derleme zamanında değerlendirebilir çünkü faktöriyel fonksiyon constexpr belirticisi ile bildirilir ve tanımlanır. Derleyici, bir C++ programında constexpr kullanarak derleme zamanında 5'in faktöriyel ifadesini değerlendirerek çalışma zamanı hesaplaması ihtiyacını ortadan kaldırır.



Şimdi kodun detaylı dökümünü spesifik detaylar ve açıklamalarla birlikte görelim.



İlk olarak, konsola yazdırmak için 'std::cout' gibi temel giriş ve çıkış işlevlerini sağlayan 'iostream' başlık dosyasını dahil etmek için #include 'i kullanırız.





Daha sonra “constexpr int faktoriyel(int n)” olan faktorial() fonksiyonuna (recursive) geçiyoruz. Bu faktöriyel() işlevi, bir “n” tamsayısının faktöriyelini hesaplayan özyinelemeli bir işlevi tanımlar. Constexpr, performans optimizasyonlarının derleme sırasında işlevin değerlendirilmesinden kaynaklanabileceğini ima eder.

Dönüş n <= 1 ? 1 : (n * faktöriyel(n – 1)) satırı, özyineleme için “n” 1'den küçük veya ona eşitse 1 (temel durum) döndürdüğünü belirten bir koşullu ifade kullanır. Değilse, faktöriyel hesaplamanın genel formülü olan faktöriyel hesaplamasını (n! = n * (n-1)!), kendisini defalarca “n – 1” ile çağırıp ardından sonucu “n” ile çarparak yapar. ”. Bu çizgiler faktöriyel hesaplama için bir bekçi görevi görür. Sayının temel düzeyde olup olmadığını kontrol eder ve eğer öyleyse 1 değerini döndürür. Aksi takdirde, her biri temel duruma ulaşılana kadar daha küçük sayılar üzerinde çalışan işlev çağrılarının zincirleme reaksiyonunu başlatır. Daha sonra sonuçlar ters sırayla çarpılır. Referansınız için kodun çıktısı aşağıdadır:



Örnek 2: C++ Constexpr Dizesini Gösteren Küçük Harfleri Sayma

Burada, bir countexpr dizesi kullanarak küçük harflerin sayısını nasıl sayacağımızı öğreneceğiz. Bu örnekte amaç, çalışma zamanı hesaplamasını azaltmak için constexpr özelliğini kullanarak belirli bir dizedeki küçük harflerin sayısını saymaktır. Constexpr olarak bildirilen countLowercase() işlevi, parametresi olarak bir 'string_view' dizesini alır ve verilen dizenin her karakterini girdi olarak yineler. Karşılaştığımız her küçük harf için sayım artırılır. Daha sonra sonuç, derleme zamanı değerlendirmesinin verimliliğini ve performans avantajlarını gösteren, işlev sabit ifadeler üzerinde çalıştığından derleme zamanında elde edilir. Öncelikle aşağıdaki kodu kontrol edin. Daha sonra detaylı açıklamaya geçelim:

#include
#include
ad alanı std'sini kullanma ;
constexpr size_t sayımKüçük harf ( string_view'ler ) {
size_t saymak = 0 ;
için ( karakter C : S ) {
eğer ( daha düşük ( C ) ) {
saymak ++;
}
}
geri dönmek saymak ;
}
int ana ( ) {
cout << 'Toplam küçük harfler' Küçük harfler ' bunlar = '
<< sayımKüçük harf ( 'Küçük harfler' ) << sonunda ;
}

Her satırın açıklamasıyla birlikte kodun ayrıntılı bir dökümünü burada bulabilirsiniz:

#include , mesajları yazdırmak amacıyla standart giriş/çıkış akışı kitaplığını kullanmak için eklenmiştir. #include , verimli dize işleme için 'string_view' sınıfını içerir.

countLowercase() işlevindeki “constexpr size_t countlower(string_view s)” işlevi, belirli bir dize görünümündeki küçük harfleri sayar. int main(), programın 'LoWeR Case LettErS' içindeki küçük harflerin sayısını belirten bir mesaj yazdıran ve giriş olarak 'LoWeR Case LettErS' ile countLowercase() işlevini çağıran ve sonucu yazdıran giriş noktasıdır. Programın aşağıdaki çıktısına bakın:

Örnek 3: C++ Constexpr'ı Kullanarak Dizi Gösterimi

Dizi gösterimi, aynı veri türündeki öğelerin yapılandırılmış koleksiyonlarından oluşan dizilerin bir programlama dili içinde nasıl oluşturulduğunu, bu dizilere nasıl erişildiğini ve değiştirildiğini gösterir. Aşağıda, programın derleme zamanı dizi başlatma ve manipülasyonunun basit bir örneğini sağladığı bir kodlama örneği üzerinden açıklayacağız.

Dizi gösterimi, dizi kavramını (aynı veri türünü paylaşan öğelerin yapılandırılmış bir koleksiyonu) ve bunların bir programlama dili kullanılarak nasıl oluşturulabileceğini, erişilebileceğini ve değiştirilebileceğini gösterir. Aşağıdaki kodlama örneğinde, bir dizinin derleme zamanında nasıl başlatılacağını, boyutunun nasıl hesaplanacağını ve verilen dizinin elemanlarının nasıl yazdırılacağını göstereceğiz. Aşağıdaki verilen koda bakın ve açıklamaya geçin:

#include
ad alanı std'sini kullanma ;
int ana ( ) {
constexpr int dizilim [ 9 ] = { 5 , 55 , 555 , 5555 , 55555 } ;
constexpr int size_array = boyutu dizilim / boyutu ( int ) ;
cout << 'Dizinin uzunluğu = ' << size_array << sonunda ;
cout << 'Dizideki öğeler = ' ;
için ( int Ben = 0 ; Ben < size_array ; ++ Ben ) {
cout << dizilim [ Ben ] << '' ;
}
}

Bu program bir constexpr dizisini başlatır, derleme zamanında uzunluğunu hesaplar ve ardından dizinin uzunluğunu ve öğelerini konsola yazdırır. Constexpr, dizinin ve özelliklerinin derleme zamanında belirlenmesini sağlar. Kodu kıralım ve spesifik detayları tek tek açıklayalım:

Çıkış için “cout” gibi fonksiyonların kullanımına izin veren standart giriş-çıkış akış kütüphanesini dahil etmek için #include çağrılır. Program yürütmeyi int main() işlevinden başlatır. main() fonksiyonu içerisinde, constexpr int arrayint[9] ifadesi ile birlikte 9 boyutunda “arrayint[]” dizisi tanımlanır. Dizi beş sayıyla başlatıldı ve geri kalan öğeler örtülü olarak 0 olarak kaldı. int uzunluk_a = sizeof arrayint / sizeof(int); 'dizi'nin boyutunu bayt cinsinden hesaplar.

Bir 'for' döngüsü, 'arrayint[]' dizisinin öğeleri arasında yinelenir ve değerler daha sonra konsola yazdırılır. Verilen kodun aşağıdaki çıktısını görelim:

Çözüm

constexpr anahtar sözcüğünün C++'a girişi ve gelişimi, sabit ifadelerin ve değerlerin ele alınma biçiminde devrim yarattı. Bu makale, faktöriyellerin hesaplanmasında, küçük harflerin sayılmasında ve derleme zamanında dizilerin başlatılmasında constexpr'ın gücünü gösteren üç pratik örneği araştırdı. Temel çıkarımlar arasında gelişmiş performans, azaltılmış çalışma süresi hesaplamaları ve iyileştirilmiş bellek verimliliği yer alıyor. Constexpr, bir kod tabanı içinde güvenilir, sabit varlıklar oluşturmak, değişmezliği sağlamak ve daha akıcı ve verimli programlara katkıda bulunmak için değerli bir varlıktır.