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::getuyuşmazlıkta istisna fırlatır;get_ifbir gösterici veya null döndürür.std::stringgibi 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.