Fungsi constexpr dan if constexpr
Evaluasi kode saat kompilasi dengan constexpr dan lakukan percabangan dengan if constexpr
Fungsi constexpr dan if constexpr adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Evaluasi Waktu Kompilasi
Kata kunci constexpr memberi tahu kompiler untuk "mengevaluasi ini pada waktu kompilasi jika memungkinkan". Perhitungan pada waktu kompilasi tidak memerlukan biaya saat berjalan.
Variabel constexpr
Variabel constexpr harus diinisialisasi dengan ekspresi konstan. Hasilnya ditetapkan pada waktu kompilasi.
constexpr int BUFFER_SIZE = 1024;
constexpr double PI = 3.14159265358979;Fungsi constexpr
Tandai fungsi sebagai constexpr agar fungsi tersebut dapat berjalan pada waktu kompilasi ketika dipanggil dengan argumen konstan.
constexpr int factorial(int n) {
return (n <= 1) ? 1 : n * factorial(n - 1);
}
constexpr int five_fact = factorial(5); // computed at compile timePengganti Saat Berjalan
Fungsi constexpr juga dapat dipanggil dengan nilai saat berjalan — dalam kasus tersebut, fungsi berjalan saat program berjalan.
int n = read_input();
int result = factorial(n); // runtime callBatasan pada Fungsi constexpr
Sebelum C++14:
- Hanya satu pernyataan return
- Tidak boleh ada perulangan
- Tidak boleh mengubah keadaan lokal
C++14 melonggarkan batasan ini; C++17 dan C++20 menambahkan lebih banyak kemampuan (try-catch, alokasi dinamis, dan fungsi virtual).
consteval (C++20)
Paksakan evaluasi pada waktu kompilasi dengan consteval. Memanggil fungsi consteval dengan argumen non-konstan merupakan kesalahan.
consteval int square(int x) { return x * x; }
constexpr int c = square(5); // OK
int x = 5;
// int r = square(x); // ERRORconstinit (C++20)
constinit menjamin bahwa variabel diinisialisasi pada waktu kompilasi, tetapi tetap memungkinkan perubahan saat program berjalan.
if constexpr (C++17)
if constexpr merupakan percabangan pada waktu kompilasi. Cabang yang tidak dipilih bahkan tidak dikompilasi — hal ini berguna untuk templat.
template <typename T>
void print(const T& value) {
if constexpr (std::is_pointer_v<T>) {
std::cout << "pointer: " << *value;
} else {
std::cout << value;
}
}Menghilangkan SFINAE
if constexpr menggantikan pola SFINAE yang rumit dengan logika bersyarat yang jelas. Jika digabungkan dengan sifat tipe, fitur ini membuat kode generik jauh lebih mudah dibaca.
Algoritme Waktu Kompilasi
C++ modern memungkinkan Anda menulis algoritme yang ternyata cukup kompleks dan berjalan sepenuhnya pada waktu kompilasi — pembuatan hash string, pembuatan tabel, dan pengurai mini.
constexpr auto fnv1a(std::string_view s) {
uint32_t h = 2166136261u;
for (char c : s) {
h = (h ^ static_cast<uint8_t>(c)) * 16777619u;
}
return h;
}
constexpr auto x = fnv1a("hello");Templat dan constexpr
Fungsi constexpr generik merupakan kombinasi yang kuat — tulis kode generik yang fleksibel terhadap tipe dan dievaluasi pada waktu kompilasi.
Diagnostik
Kesalahan pada waktu kompilasi dalam kode constexpr dilaporkan dengan lokasi yang terperinci. Kompiler modern cukup baik dalam menunjukkan langkah yang menyebabkan kesalahan.
Pemeriksaan Singkat
Apa yang dilakukan if constexpr yang tidak dilakukan oleh if biasa?
Ringkasan
constexpr memungkinkan evaluasi pada waktu kompilasi; consteval mewajibkannya; constinit menjamin inisialisasi pada waktu kompilasi. if constexpr bercabang pada waktu kompilasi — cabang yang tidak dipilih tidak pernah diinstansiasi, sehingga menggantikan SFINAE dalam banyak kasus.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Fungsi constexpr dan if constexpr” gratis?
Ya — teks lengkap “Fungsi constexpr dan if constexpr” 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 “Fungsi constexpr dan if constexpr”?
Evaluasi kode saat kompilasi dengan constexpr dan lakukan percabangan dengan 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 4 dari 4.
Berapa lama pelajaran “Fungsi constexpr dan if constexpr” 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
- Meninjau Kembali Template Fungsi dan Class
- Spesialisasi Template Parsial dan Penuh
- Template Variadik dan Paket Parameter
- Fungsi constexpr dan if constexpr