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>
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:
Contohnya:
<code class="cpp">constexpr int len1 = length("abcd");</code>
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!