Rumah >pembangunan bahagian belakang >C++ >Bolehkah Parameter Fungsi Bergantung Templat Kerana Fungsi Consteval?
Bolehkah Fungsi Consteval Mendayakan Parameter Templat Bergantung pada Argumen Fungsi?
Dalam C 17, mentakrifkan fungsi constexpr yang mengembalikan pemalar masa kompilasi mungkin kelihatan logik, tetapi ia dilarang. Pengkompil menuntut arahan pelaksanaan masa jalan, menghalang instantiasi templat yang melibatkan fungsi sedemikian.
C 20 memperkenalkan fungsi konsteval, memastikan penilaiannya pada masa penyusunan. Dengan ini, ramai yang menjangkakan kekangan ini akan hilang, membenarkan kod seperti:
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
Walau bagaimanapun, jawapannya masih tegas tidak.
Walaupun kertas itu berpotensi berubah , hakikatnya tetap bahawa definisi fungsi bukan templat ditaip sekali sahaja. Membenarkan kod sedemikian berpotensi akan membolehkan pengisytiharan pembolehubah dengan jenis bukan mesra ODR seperti std::integral_constant
Kertas itu juga membayangkan bahawa parameter tidak boleh dirawat sebagai ungkapan malar teras. Satu contoh menggambarkan ini:
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.</code>
Ringkasnya, parameter fungsi tidak akan berubah menjadi ungkapan malar disebabkan kemungkinan ketidakkonsistenan penaipan.
Atas ialah kandungan terperinci Bolehkah Parameter Fungsi Bergantung Templat Kerana Fungsi Consteval?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!