Bolehkah Parameter Fungsi Bergantung Templat Kerana Fungsi Consteval?

Linda Hamilton
Lepaskan: 2024-10-23 17:46:41
asal
151 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!