Adakah Penilaian Masa Kompilasi bagi Fungsi `constexpr` Dijamin dalam C ?

Patricia Arquette
Lepaskan: 2024-10-30 16:27:25
asal
713 orang telah melayarinya

Is Compile-Time Evaluation of `constexpr` Functions Guaranteed in C  ?

Pengiraan Panjang Rentetan Masa Kompilasi: Kaveat untuk Pengaturcara C

Menentukan panjang rentetan pada masa penyusunan boleh menjadi pengoptimuman yang berharga untuk pengendalian rentetan yang cekap. Dalam C , pengaturcara boleh menggunakan kata kunci constexpr untuk mencapai ini. Walau bagaimanapun, miskonsepsi biasa wujud berkenaan penilaian terjamin bagi fungsi constexpr pada masa penyusunan.

Pertimbangkan coretan kod berikut:

<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

Dalam kod ini, kami mentakrifkan panjang fungsi constexpr yang secara rekursif mengira panjang rentetan gaya C. Kod pemasangan yang dijana menunjukkan bahawa keputusan dikira semasa penyusunan.

Jadi, adakah penilaian masa kompilasi bagi panjang dijamin oleh standard C?

Tidak. Walaupun ada kemungkinan bahawa banyak penyusun akan menilai fungsi constexpr pada masa penyusunan, standard tidak mewajibkannya. Menurut bahagian piawai draf C 5.19, ungkapan malar boleh dinilai semasa terjemahan (iaitu, masa penyusunan), tetapi ini hanyalah nota bukan normatif.

Untuk memastikan penilaian masa penyusunan, pengaturcara boleh menggunakan dua strategi:

  1. Memerlukan penilaian masa kompilasi: Gunakan constexpr dalam konteks yang memerlukan ungkapan berterusan, seperti sempadan tatasusunan atau label huruf besar.
  2. Memulakan pembolehubah constexpr: Berikan hasil fungsi constexpr kepada pembolehubah constexpr.

Contohnya:

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

Kesimpulan:

Walaupun fungsi constexpr menawarkan potensi untuk pengiraan masa kompilasi, pengaturcara harus sedar tentang batasan penilaian terjamin mereka. Dengan mematuhi strategi yang dinyatakan di atas, pembangun boleh memanfaatkan kuasa constexpr untuk mengoptimumkan tugas pengendalian rentetan pada masa penyusunan.

Atas ialah kandungan terperinci Adakah Penilaian Masa Kompilasi bagi Fungsi `constexpr` Dijamin dalam C ?. 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!