Koşullu Mantık
std::conditional ve if constexpr
Koşullu Mantık, 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 ve Dallanma Seçimi
Tür özelliği mantığı, kodun derleme zamanında türleri ve kod yollarını seçmesini sağlar. Temel araçlar std::conditional ve if constexpr'dir.
std::conditional
std::conditional_t<cond, A, B>, cond doğru olduğunda A'ya, aksi durumda B'ye değerlendirilir.
#include <iostream>
#include <type_traits>
int main() {
using T = std::conditional_t<true, int, double>;
std::cout << std::is_same_v<T, int> << "\n";
return 0;
}Bir Storage Türü Seçme
Yaygın bir kullanım: büyük değerler için geniş bir tür, diğer durumlarda ise dar bir tür seçmek.
#include <iostream>
#include <type_traits>
template <bool Big>
struct Storage {
using type = std::conditional_t<Big, long long, short>;
};
int main() {
Storage<true>::type a = 10;
std::cout << sizeof(a) << "\n";
return 0;
}if constexpr Temelleri
if constexpr (C++17), derleme zamanında seçilmeyen dalı eler. Verilen tür için yalnızca seçilen dalın derlenmesi gerekir.
#include <iostream>
#include <type_traits>
template <typename T>
void describe(T v) {
if constexpr (std::is_integral_v<T>)
std::cout << "integer: " << v << "\n";
else
std::cout << "other: " << v << "\n";
}
int main() {
describe(5);
describe(2.5);
return 0;
}if constexpr Neden Çalışma Zamanı if İfadesinden Daha İyidir
Normal bir if ifadesinde her iki dalın da her T için derlenmesi gerekir. if constexpr kullanıldığında reddedilen dal örneklenmez; bu nedenle aksi durumda geçersiz olacak türe özgü kodu içerebilir.
Türe Özgü İşlemler
Bu, yalın bir if ile mümkün değildir; çünkü .length(), int için derlenemez.
#include <iostream>
#include <string>
#include <type_traits>
template <typename T>
auto size_of(const T& v) {
if constexpr (std::is_same_v<T, std::string>)
return v.length();
else
return sizeof(v);
}
int main() {
std::cout << size_of(std::string("hi")) << "\n";
std::cout << size_of(42) << "\n";
return 0;
}Aşırı Yüklemeler için enable_if
if constexpr kullanılmadan önce std::enable_if, aşırı yüklemeleri SFINAE aracılığıyla seçiyordu. Bir koşul yanlış olduğunda bir işlevi aşırı yük çözümlemesinden çıkarır.
#include <iostream>
#include <type_traits>
template <typename T, std::enable_if_t<std::is_integral_v<T>, int> = 0>
void only_int(T v) { std::cout << "int " << v << "\n"; }
int main() {
only_int(7);
return 0;
}Koşulları Birleştirme
Derleme zamanı koşullarında özellikleri, tıpkı sıradan Boolean değerlerde olduğu gibi &&, || ve ! ile birleştirebilirsiniz.
#include <iostream>
#include <type_traits>
template <typename T>
void check() {
if constexpr (std::is_integral_v<T> && !std::is_same_v<T, bool>)
std::cout << "non-bool integer\n";
else
std::cout << "something else\n";
}
int main() {
check<int>();
check<bool>();
return 0;
}Özyinelemeli Derleme Zamanı Seçimi
if constexpr, demetleri veya parametre paketlerini öğe öğe işlemek için yararlı olan derleme zamanı özyinelemesini mümkün kılar.
conjunction ve disjunction
C++17 ayrıca bir özellikler listesindeki mantıksal AND/OR işlemlerini kısa devreli olarak gerçekleştirmek için std::conjunction ve std::disjunction sunar.
Doğru Aracı Seçme
Bir tür seçmek için conditional, kod seçmek için if constexpr, aşırı yük çözümlemesini denetlemek için enable_if/kavramları kullanın. Modern kod, açıklık için if constexpr ve kavramları tercih eder.
Hızlı Kontrol
if constexpr ifadesinin temel yararını hatırlayın.
Özet
Derleme zamanı koşullu mantığını öğrendiniz.
conditional_t<c,A,B>bir tür seçerif constexprkodu seçer ve diğer dalı elerenable_if, SFINAE aracılığıyla aşırı yük çözümlemesini denetler- Özellikleri mantıksal işleçlerle birleştirin
Sıkça Sorulan Sorular
“Koşullu Mantık” dersi ücretsiz mi?
Evet — “Koşullu Mantık” 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.
“Koşullu Mantık” dersinde ne öğreneceğim?
std::conditional ve if constexpr 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.
“Koşullu Mantık” 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.