constexpr dan Masa Kompilasi
Kira nilai semasa kompilasi
constexpr dan Masa Kompilasi ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Maksud constexpr
constexpr memberitahu pengkompil bahawa sesuatu nilai atau fungsi boleh dinilai pada masa kompilasi, lalu menghasilkan pemalar masa kompilasi yang sebenar.
#include <iostream>
int main() {
constexpr int size = 4 * 4; // computed at compile time
int arr[size];
std::cout << sizeof(arr) / sizeof(int) << "\n";
}Fungsi constexpr
Fungsi constexpr boleh dijalankan pada masa kompilasi apabila diberikan argumen malar, dan pada masa jalan jika tidak.
#include <iostream>
constexpr int square(int x) { return x * x; }
int main() {
constexpr int s = square(5); // compile time
int n = 6;
std::cout << s << " " << square(n) << "\n"; // second at runtime
}Pemalar Masa Kompilasi dalam Tatasusunan
Oleh sebab nilai constexpr diketahui pada masa kompilasi, nilai tersebut boleh menentukan saiz tatasusunan dan menjadi argumen templat.
constexpr berbanding const
const bermaksud "tidak boleh berubah"; constexpr bermaksud "diketahui pada masa kompilasi". Setiap constexpr secara tersirat ialah const, tetapi bukan setiap const ialah constexpr.
#include <iostream>
int main() {
int x;
std::cin >> x;
const int a = x; // const but runtime value
constexpr int b = 10; // compile-time constant
std::cout << b << "\n";
}constexpr Rekursif
Fungsi constexpr boleh memanggil dirinya sendiri secara rekursif, lalu membolehkan pengkompil mengira perkara seperti faktorial sebelum program dijalankan.
#include <iostream>
constexpr long factorial(int n) {
return n <= 1 ? 1 : n * factorial(n - 1);
}
int main() {
constexpr long f = factorial(5); // 120 at compile time
std::cout << f << "\n";
}constexpr yang Lebih Berkuasa dalam C++ Moden
Sejak C++14, fungsi constexpr boleh mengandungi gelung, pemboleh ubah setempat dan cabang, lalu membolehkan anda mengira pemalar kompleks pada masa kompilasi.
#include <iostream>
constexpr int sumTo(int n) {
int total = 0;
for (int i = 1; i <= n; ++i) total += i;
return total;
}
int main() {
constexpr int s = sumTo(100);
std::cout << s << "\n";
}Pemboleh Ubah constexpr Mesti Dimulakan pada Masa Kompilasi
Pemboleh ubah yang diisytiharkan sebagai constexpr mesti mempunyai pemula yang boleh dinilai pada masa kompilasi, atau program tidak akan berjaya dikompilasi.
Faedah Pengiraan Masa Kompilasi
Pengiraan pada masa kompilasi bermaksud tiada kos masa jalan, nilai boleh digunakan dalam konteks pemalar dan pengesanan ralat berlaku lebih awal.
constexpr dan Templat
Nilai constexpr sememangnya sesuai digandingkan dengan templat dan std::array, yang saiz dan parameternya mesti berupa pemalar masa kompilasi.
Apabila Beralih kepada Masa Jalan
Jika fungsi constexpr menerima argumen bukan malar, fungsi itu hanya berjalan pada masa jalan seperti fungsi biasa — tiada ralat berlaku.
Utamakan constexpr untuk Pemalar
Gunakan constexpr untuk pemalar sebenar seperti saiz, matematik dan jadual carian. Ia lebih bermakna berbanding const dan membolehkan jaminan masa kompilasi.
Semakan Pantas
Uji pemahaman anda tentang constexpr.
Ringkasan
Anda telah mempelajari bahawa constexpr membolehkan penilaian masa kompilasi bagi pemboleh ubah dan fungsi, berbeza daripada const yang hanya melarang pengubahsuaian, menyokong gelung dan rekursi dalam C++ moden, serta beralih kepada masa jalan apabila menerima input bukan malar.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “constexpr dan Masa Kompilasi” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “constexpr dan Masa Kompilasi”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “constexpr dan Masa Kompilasi”?
Kira nilai semasa kompilasi Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “constexpr dan Masa Kompilasi” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pemboleh Ubah dan Parameter const
- Fungsi Ahli const
- constexpr dan Masa Kompilasi
- consteval dan constinit