C++ Academy · Pelajaran

constexpr dan Masa Kompilasi

Kira nilai semasa kompilasi

Pelajaran 3 daripada 413 langkah

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.

Percuma untuk bermula

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

  1. Pemboleh Ubah dan Parameter const
  2. Fungsi Ahli const
  3. constexpr dan Masa Kompilasi
  4. consteval dan constinit
← Kembali ke C++ Academy