crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C++20/23: Modern Programlamada Yeni Bir Devir
C++20, C++11'den bu yana gelen en kapsamlı güncelleme olarak kabul edilirken; C++23 bu özellikleri daha da rafine hale getirerek geliştirici deneyimini (Developer Experience) ön plana çıkarıyor.
1. Concepts: Şablonlara Disiplin Geliyor
Eskiden şablon (template) kullanırken yanlış bir tip gönderdiğimizde sayfalar dolusu, anlaşılmaz hata mesajları alırdık. Concepts, şablonların hangi tiplerle çalışabileceğini önceden belirleyen kurallar setidir.
[]Avantajı: Hatalar derleme anında, çok daha temiz mesajlarla yakalanır.
[]Kullanım: Fonksiyonun sadece "sayısal" veya "sıralanabilir" tiplerle çalışmasını garanti edebilirsiniz.
C++:
template <typename T>
concept Sayisal = std::is_arithmetic_v<T>;
Sayisal auto topla(Sayisal auto a, Sayisal auto b) {
return a + b;
}
// topla(5, 10); -> ÇALIŞIR
// topla("a", "b"); -> DERLEME HATASI (Net ve kısa!)
2. Ranges: STL Algoritmalarında Devrim
std::sort(v.begin(), v.end()) yazmaktan sıkılmadınız mı? Ranges kütüphanesi, konteynerlerin tamamını birer bütün olarak ele almanızı ve fonksiyonel programlama tarzında "pipe" (|) operatörü ile veriyi işlemenizi sağlar.
[]Görünüm: Veriyi filtrele, dönüştür ve sonucu al; hepsi tek bir satırda!
[]Verimlilik: "Lazy evaluation" sayesinde veriler sadece ihtiyaç duyulduğunda işlenir.
C++:
namespace views = std::views;
std::vector sayilar = {1, 2, 3, 4, 5, 6};
auto sonuc = sayilar | views::filter([](int n) { return n % 2 == 0; }) // Çiftleri seç
| views::transform([](int n) { return n * n; }); // Karelerini al
// Çıktı: 4, 16, 36
3. Modules: Elveda Başlık Dosyaları (#include)
40 yıldır kullanılan
#include sistemi, aynı dosyaların tekrar tekrar okunması nedeniyle derleme sürelerini çok uzatıyordu. Modules, modern dillerdeki (Python, Java) içe aktarma sistemini C++'a getiriyor.
[]Hız: Sadece bir kez derlenir, defalarca kullanılır. Derleme sürelerini %50'den fazla azaltabilir.
[]Temizlik: Macro çakışmaları ve "header hell" (başlık cehennemi) sorunları tarih oluyor.
C++:
// matematik.ixx (Modül Tanımı)
export module matematik;
export int topla(int a, int b) { return a + b; }
// main.cpp (Kullanım)
import matematik;
int main() { return topla(3, 5); }
4. C++23 ile Gelen Bazı Kritik Yenilikler
C++23, C++20'nin üzerine inşa edilen "cilalama" aşamasıdır:
[]std::expected: Bir fonksiyonun ya beklenen değeri ya da bir hata kodunu dönmesini sağlayan şık bir yapı.
[]std:
rint / std:
rintln: cout'tan çok daha hızlı ve Python tarzı kolay formatlama sunan yeni yazdırma yöntemi.- Deducing this: Recursive lambda yazmayı ve sınıf metotlarını daha esnek tanımlamayı sağlar.
Sonuç
C++20 ve 23 ile birlikte dil artık "C with Classes" olmaktan tamamen çıktı ve oldukça yüksek seviyeli, güvenli ve modern bir yapıya büründü. Eğer hala eski tarz döngüler ve karmaşık şablonlarla uğraşıyorsanız, bu yenilikler kod yazma keyfinizi iki katına çıkaracaktır.