Logika Kondisional
std::conditional dan if constexpr
Logika Kondisional adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Memilih Tipe dan Cabang
Logika sifat tipe memungkinkan kode memilih tipe dan jalur kode saat kompilasi. Alat utamanya adalah std::conditional dan if constexpr.
std::conditional
std::conditional_t<cond, A, B> menghasilkan A ketika cond bernilai true, dan B jika tidak.
#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;
}Memilih Tipe Storage
Penggunaan umum: pilih tipe dengan rentang besar untuk nilai besar dan tipe dengan rentang lebih kecil untuk nilai lainnya.
#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;
}Dasar-Dasar if constexpr
if constexpr (C++17) membuang cabang yang tidak dipilih pada waktu kompilasi. Hanya cabang yang dipilih yang harus berhasil dikompilasi untuk tipe tersebut.
#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;
}Mengapa if constexpr Lebih Unggul daripada if Saat Eksekusi
Dengan if biasa, kedua cabang harus berhasil dikompilasi untuk setiap T. Dengan if constexpr, cabang yang ditolak tidak dibuat instansnya, sehingga cabang tersebut dapat berisi kode khusus tipe yang sebaliknya tidak valid.
Operasi Khusus Tipe
Hal ini tidak mungkin dilakukan dengan if biasa karena .length() tidak akan berhasil dikompilasi untuk int.
#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;
}enable_if untuk Overload
Sebelum if constexpr tersedia, std::enable_if memilih overload melalui SFINAE. Fitur ini menghapus fungsi dari resolusi overload ketika suatu kondisi bernilai salah.
#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;
}Menggabungkan Kondisi
Anda dapat menggabungkan trait dengan &&, ||, dan ! dalam kondisi waktu kompilasi, sama seperti boolean biasa.
#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;
}Pemilihan Rekursif pada Waktu Kompilasi
if constexpr memungkinkan rekursi pada waktu kompilasi, yang berguna untuk memproses tuple atau paket parameter satu per satu.
conjunction dan disjunction
C++17 juga menyediakan std::conjunction dan std::disjunction untuk melakukan AND/OR logis dengan evaluasi hubung singkat pada daftar trait.
Memilih Alat yang Tepat
Gunakan conditional untuk memilih tipe, if constexpr untuk memilih kode, dan enable_if/konsep untuk mengendalikan resolusi overload. Kode modern lebih mengutamakan if constexpr dan konsep karena lebih jelas.
Pemeriksaan Singkat
Ingat kembali manfaat utama if constexpr.
Rangkuman
Anda telah mempelajari logika kondisional pada waktu kompilasi.
conditional_t<c,A,B>memilih tipeif constexprmemilih kode dan membuang cabang lainnyaenable_ifmengendalikan resolusi overload melalui SFINAE- Gabungkan trait dengan operator logis
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Logika Kondisional” gratis?
Ya — teks lengkap “Logika Kondisional” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Logika Kondisional”?
std::conditional dan if constexpr Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Logika Kondisional” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengeksekusi Kueri terhadap Tipe
- Mentransformasi Tipe
- Logika Kondisional
- Menulis Trait Kustom