Bagaimanakah Kami Boleh Menjamin Penilaian Masa Kompilasi bagi Panjang Rentetan?

Susan Sarandon
Lepaskan: 2024-10-31 10:13:29
asal
221 orang telah melayarinya

How Can We Guarantee Compile-Time Evaluation of String Length?

Pengiraan Masa Kompilasi Panjang Rentetan

Untuk mengira panjang literal rentetan pada masa penyusunan, coretan kod di bawah menggunakan fungsi rekursif:

<code class="cpp">#include <cstdio>

int constexpr length(const char* str)
{
    return *str ? 1 + length(str + 1) : 0;
}

int main()
{
    printf("%d %d", length("abcd"), length("abcdefgh"));
}</code>
Salin selepas log masuk

Fungsi ini berjaya mengira panjang seperti yang dijangkakan, seperti yang dibuktikan oleh kod pemasangan yang dijana daripada clang, yang menunjukkan keputusan dikira pada masa penyusunan.

Jaminan Standard untuk Penilaian Masa Kompilasi

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penilaian ungkapan malar pada masa penyusunan tidak dijamin secara eksplisit oleh standard. Walaupun draf C standard seksyen 5.19 mengandungi petikan bukan normatif yang menyatakan bahawa ungkapan malar boleh dinilai semasa terjemahan, ini tidak memberikan jaminan yang pasti.

Memastikan Penilaian Masa Kompilasi

Untuk memastikan sesuatu fungsi dinilai pada masa penyusunan, Bjarne Stroustrup mengesyorkan agar keputusannya diberikan kepada pembolehubah konstexpr. Ini boleh dilihat dalam contoh berikut:

<code class="cpp">constexpr int len1 = length("abcd");</code>
Salin selepas log masuk

Selain itu, Bjarne Stroustrup menggariskan dua kes khusus di mana penilaian masa kompilasi dijamin:

  1. Apabila fungsi digunakan di mana ungkapan malar diperlukan, seperti terikat tatasusunan.
  2. Apabila fungsi digunakan untuk memulakan constexpr.

Oleh itu, untuk penilaian masa kompilasi yang boleh dipercayai, adalah dinasihatkan untuk mengikuti salah satu daripada dua pendekatan ini.

Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Menjamin Penilaian Masa Kompilasi bagi Panjang Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!