0Pricing
C++ Academy · Ders

Birlikler ve Riskleri

Türler arasında belleği paylaşın

Birlikler ve Riskleri, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Bir Birleşim Nedir

Bir union, birden çok üyenin aynı belleği paylaşmasını sağlar. Aynı anda yalnızca bir üye geçerlidir ve birleşim yalnızca en büyük üyesi kadar yer kaplar.

#include <iostream>
union Number {
    int i;
    float f;
};
int main() {
    Number n;
    n.i = 42;
    std::cout << n.i << "\n";
}

Birleşimin Boyutu

Üyeler üst üste bindiği için bir union'ın sizeof değeri, toplamları değil, en büyük üyesinin boyutuna (ve olası hizalama dolgularına) eşittir.

#include <iostream>
union Mix { char c; int i; double d; };
int main() {
    std::cout << sizeof(Mix) << "\n"; // size of double (often 8)
}

Birini Yazıp Başkasını Okuma

Bir üyeye yazıp farklı bir üyeyi okumak temel risktir. Bitler yeniden yorumlanır; bu da genellikle tanımsız veya şaşırtıcı sonuçlar doğurur.

#include <iostream>
union Bits { int i; float f; };
int main() {
    Bits b;
    b.f = 1.0f;
    std::cout << b.i << "\n"; // reads float bits as int
}

Yalnızca Bir Etkin Üye

En son yazdığınız üye, güvenle okuyabileceğiniz tek üyedir. Hangi üyenin "etkin" olduğunu kendiniz izlemelisiniz; birleşim bunu hatırlamaz.

#include <iostream>
union Value { int i; double d; };
int main() {
    Value v;
    v.d = 3.14;        // d is active
    std::cout << v.d << "\n";
}

Etiketli Birleşim Deseni

Birleşimleri güvenle kullanmak için onları, etkin üyeyi kaydeden bir etiketle (enum) eşleştirin. Bu, std::variant türünün elle uygulanmış öncülüdür.

#include <iostream>
struct Tagged {
    enum { Int, Double } tag;
    union { int i; double d; };
};
int main() {
    Tagged t; t.tag = Tagged::Int; t.i = 7;
    if (t.tag == Tagged::Int) std::cout << t.i << "\n";
}

Doğru Üyeyi Okuma

Okumadan önce her zaman etikete göre dallanın. Yanlış üyeyi okumak anlamsız değerler üretir.

#include <iostream>
struct Tagged {
    enum { Int, Double } tag;
    union { int i; double d; };
};
void print(const Tagged& t) {
    if (t.tag == Tagged::Int) std::cout << "int " << t.i << "\n";
    else std::cout << "double " << t.d << "\n";
}
int main() { Tagged t{Tagged::Double}; t.d = 2.5; print(t); }

Basit Olmayan Üyeler

Bir birleşime oluşturucusu veya yıkıcısı olan bir üye (örneğin std::string) eklemek, elle oluşturma ve yok etme işlemlerini gerektirir. Bu hataya açıktır ve std::variant kullanmayı tercih etmek için başka bir nedendir.

Anonim Birleşimler

Anonim birleşimin adı yoktur; üyelerine doğrudan erişilir. Bir yapı içinde kullanışlıdır, ancak aynı etkin üye kuralı geçerlidir.

#include <iostream>
struct Packet {
    int kind;
    union { int code; char letter; };
};
int main() {
    Packet p; p.kind = 1; p.code = 99;
    std::cout << p.code << "\n";
}

Birleşimler Neden Risklidir

Tehlikelerin özeti:

  • Hangi üyenin etkin olduğuna dair bilgi tutulmaz.
  • Etkin olmayan bir üyeyi okumak tanımsız davranıştır.
  • Basit olmayan türler için ömür yönetiminin elle yapılması gerekir.

Birleşimler Ne Zaman Hâlâ Yararlıdır

Birleşimler düşük düzeyli çalışmalarda hâlâ yararlıdır: bitleri yeniden yorumlamak, kısıtlı gömülü kodda bellek tasarrufu yapmak veya sabit bir ikili düzenle eşleşmek için kullanılabilir. Günlük kullanımda "birkaç türden biri" verileri için daha güvenli seçeneği tercih edin.

std::variant'a Doğru

std::variant, etkin türü sizin için izleyen ve yanlış türe erişmeye çalıştığınızda istisna fırlatan tür güvenli bir birleşimdir. Bu kursun geri kalanında bu türü inceleyeceğiz.

Kısa Kontrol

Birleşimler hakkındaki anlayışınızı kontrol edin.

Özet

Birleşimler hakkında şunları öğrendiniz:

  • Tüm üyeler aynı bellek bloğunu paylaşır.
  • Yalnızca son yazılan üye okunmak için geçerlidir.
  • Etkin üyeyi izlemek için bir etiket (enum) kullanın.
  • Modern C++'ta güvenlik için std::variant kullanmayı tercih edin.

Sıkça Sorulan Sorular

“Birlikler ve Riskleri” dersi ücretsiz mi?

Evet — “Birlikler ve Riskleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Birlikler ve Riskleri” dersinde ne öğreneceğim?

Türler arasında belleği paylaşın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Birlikler ve Riskleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Kapsamlı enum class
  2. Birlikler ve Riskleri
  3. std::variant
  4. std::visit
← C++ Academy Sayfasına Dön