Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Consteval Membenarkan Parameter Templat Bergantung pada Argumen Fungsi?
Bolehkah Fungsi Consteval Mendayakan Parameter Templat Bersandar pada Argumen Fungsi?
Dalam C 17, fungsi constexpr seperti coretan di bawah adalah tidak sah:
<code class="cpp">constexpr int foo(int i) { return std::integral_constant<int, i>::value; }</code>
Walaupun penilaian foo pada masa penyusunan, pengkompil memerlukan ia boleh dilaksanakan pada masa jalan, menghalang instantiasi templat.
C 20 memperkenalkan fungsi konsteval, yang menguatkuasakan penilaian masa kompilasi. Seseorang mungkin tertanya-tanya sama ada ini membenarkan kod seperti berikut:
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
Jawapannya tidak.
Potensi perubahan kertas tidak boleh mengubah taip tunggal bukan templat definisi fungsi. Tambahan pula, jika kod ini sah, ia akan membuka kemungkinan untuk mengisytiharkan pembolehubah jenis std::integral_constant
Makalah ini juga menggambarkan bahawa parameter tidak akan dianggap sebagai ungkapan malar teras melalui contoh:
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, but that's okay. }</code>
Pada dasarnya, parameter fungsi akan sentiasa kekurangan status ekspresi malar disebabkan kemungkinan ketidakkonsistenan menaip.
Atas ialah kandungan terperinci Bolehkah Fungsi Consteval Membenarkan Parameter Templat Bergantung pada Argumen Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!