Parameter Rujukan dalam Fungsi Constexpr dan Ungkapan Malar
Dalam C , ungkapan malar ialah ungkapan yang menilai kepada nilai malar pada penyusunan- masa. Pertimbangkan fungsi constexpr berikut:
template <size_t S1, size_t S2> auto concatenate(const std::array<uint8_t, S1> &data1, const std::array<uint8_t, S2> &data2) { std::array<uint8_t, data1.size() + data2.size()> result; // Possible error here return result; }
Apabila menyusun fungsi ini menggunakan Clang 6.0 dengan -std=c 17, ia gagal untuk menyusun kerana ekspresi data1.size() sedang dinilai pada masa jalan. Ralat ini berlaku hanya apabila parameter adalah rujukan, menunjukkan kemungkinan salah faham tentang kelakuan parameter rujukan dalam fungsi constexpr.
Menurut piawai C ([expr.const]/4), ungkapan ialah teras ungkapan malar jika penilaiannya tidak melibatkan penilaian ungkapan id yang merujuk kepada pembolehubah atau ahli data jenis rujukan melainkan ia mempunyai pemulaan sebelumnya yang sama ada boleh digunakan dalam ungkapan malar atau hayatnya bermula dalam penilaian ungkapan malar teras.
Dalam fungsi yang diberikan, parameter rujukan tidak mempunyai pemulaan terdahulu, menjadikan ungkapan saiz()nya tidak tetap. Oleh itu, ia tidak boleh digunakan dalam ungkapan malar, yang membawa kepada ralat kompilasi.
Untuk menyelesaikan isu dan menggunakan parameter rujukan dalam ungkapan malar, anda hanya boleh menyediakan permulaan sebelumnya atau menggantikan data1.size( ) dengan parameter templat S1.
Atas ialah kandungan terperinci Bolehkah Parameter Rujukan Digunakan dalam Fungsi C Constexpr untuk Ungkapan Malar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!