0Pricing
C++ Academy · Ders

std::variant

Tür güvenli bir birlik

std::variant, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. 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.

Tür Güvenli Birleşim

std::variant, sabit bir tür listesinden tam olarak bir değer tutar ve hangisini tuttuğunu hatırlar. Kullanmak için <variant> ekleyin.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 10;
    std::cout << std::get<int>(v) << "\n";
}

Farklı Türler Atama

Bir varyantı, alternatif türlerinden herhangi birine yeniden atayabilirsiniz. Hangi alternatifin etkin olduğunu otomatik olarak günceller.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 5;
    v = 3.14; // now holds a double
    std::cout << std::get<double>(v) << "\n";
}

Etkin Türü Denetleme

std::holds_alternative<T>(v), varyantın o anda T türünü tutup tutmadığını bildirir.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 2.0;
    std::cout << std::holds_alternative<double>(v) << "\n";
    std::cout << std::holds_alternative<int>(v) << "\n";
}

index() İşlevi

v.index(), etkin türün tür listesindeki sıfır tabanlı konumunu döndürür.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double, char> v = (char)65;
    std::cout << v.index() << "\n"; // 2
}

std::get ile Güvenli Erişim

std::get<T>, T etkinse değeri döndürür; aksi takdirde std::bad_variant_access istisnasını fırlatır. Sessizce oluşan anlamsız değerler yoktur.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 7;
    try {
        std::cout << std::get<double>(v) << "\n";
    } catch (const std::bad_variant_access& e) {
        std::cout << "wrong type!\n";
    }
}

İstisna Fırlatmayan get_if

std::get_if<T>(&v), değere yönelik bir gösterici döndürür; T etkin değilse nullptr döndürür. Dallanmadan yapılan denetimler için çok uygundur.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v = 9;
    if (auto p = std::get_if<int>(&v))
        std::cout << "int " << *p << "\n";
}

Varsayılan Oluşturma

Varsayılan olarak oluşturulan bir varyant, ilk türünün değer başlatması yapılmış sürümünü tutar. İlk türün makul bir varsayılan oluşturacağı şekilde türlerinizi sıralayın.

#include <iostream>
#include <variant>
int main() {
    std::variant<int, double> v; // holds int 0
    std::cout << std::get<int>(v) << "\n";
}

Dizeleri Saklama

Ham birleşimlerin aksine bir varyant, std::string gibi basit olmayan türleri güvenle tutabilir; ömür sizin için yönetilir.

#include <iostream>
#include <string>
#include <variant>
int main() {
    std::variant<int, std::string> v = std::string("hello");
    std::cout << std::get<std::string>(v) << "\n";
}

Dönüş Türü Olarak Varyant

Bir işlev, varyant döndürerek birkaç türden birini döndürebilir. Çağıranlar daha sonra hangi türün döndüğünü öğrenmek için varyantı inceler.

#include <iostream>
#include <string>
#include <variant>
std::variant<int, std::string> parse(bool ok) {
    if (ok) return 42;
    return std::string("error");
}
int main() {
    auto r = parse(false);
    if (auto s = std::get_if<std::string>(&r)) std::cout << *s << "\n";
}

Yerinde Değişiklik için emplace

v.emplace<T>(args...), T türünde yeni bir değeri doğrudan varyantın içinde oluşturur ve etkin alternatifi değiştirir.

#include <iostream>
#include <string>
#include <variant>
int main() {
    std::variant<int, std::string> v = 1;
    v.emplace<std::string>("switched");
    std::cout << std::get<std::string>(v) << "\n";
}

Variant Neden Tercih Edilmeli?

std::variant, tam tür güvenliğiyle birleşimlerin bellek verimliliğini sunar: etkin türü izler, ömürleri yönetir ve yanlış türe erişmeyi reddeder. Sonraki derste bu yapıyı işlemenin en temiz yolunu göreceksiniz.

Kısa Kontrol

std::variant hakkındaki anlayışınızı kontrol edin.

Özet

std::variant hakkında şunları öğrendiniz:

  • Birkaç türden birini tutar ve hangisini tuttuğunu izler.
  • holds_alternative / index(), etkin türü inceler.
  • std::get uyuşmazlıkta istisna fırlatır; get_if bir gösterici veya null döndürür.
  • std::string gibi basit olmayan türleri güvenle saklar.

Sıkça Sorulan Sorular

“std::variant” dersi ücretsiz mi?

Evet — “std::variant” 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.

“std::variant” dersinde ne öğreneceğim?

Tür güvenli bir birlik 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 3. dersidir.

“std::variant” 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