Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Consteval Mendayakan Pergantungan Parameter Templat pada Argumen Fungsi dalam C 20?
Fungsi Konsteval dan Ketergantungan Parameter Templat pada Argumen Fungsi
Dalam C 17, menggunakan fungsi yang mengembalikan pemalar terus dalam pengisytiharan parameter templat adalah dilarang kerana kekangan pelaksanaan masa jalan. Dengan pengenalan fungsi konsteval dalam C 20, kekangan ini dijangka akan dihapuskan. Walau bagaimanapun, adakah ini akan membolehkan kod berikut berjaya dikompil?
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
Tidak.
Walaupun keperluan penilaian masa kompilasi fungsi consteval, definisi fungsi itu sendiri sahaja menjalani taip sekali. Oleh itu, parameter fungsi tidak akan sekali-kali dianggap sebagai ungkapan pemalar teras kerana potensi percanggahan menaip.
Penghadan ini selanjutnya ditekankan dalam cadangan C 20, yang secara eksplisit mengecualikan parameter daripada dianggap sebagai ungkapan malar dalam contohnya :
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.</code>
Oleh itu, fungsi konsteval tidak membenarkan parameter templat bergantung pada hujah fungsi kerana parameter tidak mempunyai jaminan menaip yang diperlukan sebagai ungkapan malar.
Atas ialah kandungan terperinci Bolehkah Fungsi Consteval Mendayakan Pergantungan Parameter Templat pada Argumen Fungsi dalam C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!