Dalam C , pernyataan "if" biasanya digunakan untuk percabangan bersyarat berdasarkan hasil keadaan tertentu. Walau bagaimanapun, untuk penilaian bersyarat masa kompilasi, pernyataan "if constexpr()" berfungsi sebagai alat yang kuat. Artikel ini meneroka perbezaan antara "if constexpr()" dan "if()", menyerlahkan kes penggunaan dan kebolehgunaannya.
Perbezaan asas antara "if constexpr() " dan "jika()" terletak pada masa penilaian mereka. "if constexpr()" menilai ungkapan dalam kurungan pada masa kompilasi, manakala "if()" menilai keadaannya pada masa jalan. Perbezaan ini membawa implikasi yang ketara:
Pertimbangkan senario di mana anda mempunyai fungsi, "panjang", yang memerlukan logik yang berbeza untuk menentukan panjang nombor dan objek dengan Fungsi ".length()". Menggunakan "ifconstexpr()", anda boleh mengendalikan kedua-dua kes dengan satu fungsi, kerana ia membolehkan anda menilai jenis nilai pada masa penyusunan. Berikut ialah contoh:
template<typename T> auto length(const T& value) noexcept { if constexpr (std::is_integral<T>::value) { // is number return value; else return value.length(); }
Satu lagi kes penggunaan "if constexpr()" adalah untuk memintas kemungkinan ralat yang timbul daripada operasi haram. Sebagai contoh, jika anda memutuskan untuk menggunakan fungsi ahli pada nilai yang mungkin tidak mempunyainya, anda boleh menggunakan "if constexpr()" untuk menguji jenis dan jalankan laluan lain jika fungsi itu tidak tersedia:
template<typename T> bool contains(const T& value, const std::string& key) noexcept { if constexpr (has_find<T>::value) { // has std::find function return std::find(value.begin, value.end, key) != value.end(); else return false; }
Secara amnya, "if constexpr()" harus digunakan apabila anda perlu membuat keputusan berdasarkan hasil syarat semasa penyusunan. Ini membolehkan pengkompil mengoptimumkan kod dan menghapuskan kod yang tidak perlu atau tidak boleh dicapai. "if()", sebaliknya, adalah sesuai apabila hasil keadaan diketahui hanya pada masa jalan.
Atas ialah kandungan terperinci Apakah perbezaan antara `if constexpr()` dan `if()` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!