Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Parameter Fungsi Bergantung Templat Kerana Fungsi Consteval?

Bolehkah Parameter Fungsi Bergantung Templat Kerana Fungsi Consteval?

Linda Hamilton
Linda Hamiltonasal
2024-10-23 17:46:41151semak imbas

Can Function Parameters Be Template Dependent Because of Consteval Functions?

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, yang sangat tidak diingini.

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!

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