Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Fungsi Consteval Mendayakan Pergantungan Parameter Templat pada Argumen Fungsi dalam C 20?

Bolehkah Fungsi Consteval Mendayakan Pergantungan Parameter Templat pada Argumen Fungsi dalam C 20?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 16:43:02477semak imbas

Can Consteval Functions Enable Template Parameter Dependence on Function Arguments in 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn