Rumah >pembangunan bahagian belakang >C++ >Mengapa Terapung Tidak Boleh Digunakan sebagai Parameter Templat dalam C ?

Mengapa Terapung Tidak Boleh Digunakan sebagai Parameter Templat dalam C ?

Patricia Arquette
Patricia Arquetteasal
2024-12-22 04:50:09780semak imbas

Why Can't Floats Be Used as Template Parameters in C  ?

Menerokai Ketidakupayaan Terapung sebagai Parameter Templat

Dalam alam C , parameter templat berfungsi sebagai pemegang tempat untuk jenis data atau nilai apabila mentakrifkan kelas atau fungsi generik. Semasa menggunakan integer sebagai parameter templat adalah lazim, percubaan untuk menggunakan nilai apungan sering mengakibatkan ralat pengkompil.

Sekatan Standard

Piawaian C 11 secara jelas melarang terapung -titik nombor sebagai templat bukan jenis hujah:



Argumen templat untuk parameter templat bukan jenis dan bukan templat tidak boleh menjadi nilai titik terapung.

Ini sekatan berpunca daripada fakta bahawa pengiraan titik terapung tidak tepat, yang membawa kepada kemungkinan ralat atau tingkah laku yang tidak dijangka apabila membandingkan nilai titik terapung. Sebagai contoh, kod berikut mungkin tidak berfungsi seperti yang dimaksudkan kerana perwakilan titik terapung yang tidak tepat:

<br>func<1/3.f>(); // Fungsi panggilan 1<br>func<2/6.f>(); // Fungsi panggilan 2<br>

Penyelesaian Kemungkinan

Walaupun sekatan standard, terdapat cara alternatif untuk mewakili nilai titik terapung sebagai hujah templat menggunakan ungkapan malar C 11 (constexpr):

  1. Perwakilan Numerator/Penyebut: Kira pengangka dan penyebut nilai titik terapung pada masa penyusunan dan hantarkannya sebagai hujah integer yang berasingan. Tentukan ambang untuk kesaksamaan untuk memastikan nilai yang rapat antara satu sama lain menghasilkan perwakilan yang sama.

Dengan menerima penyelesaian ini, anda boleh mencapai kefungsian yang serupa tanpa melanggar batasan standard. Walau bagaimanapun, adalah penting untuk mempertimbangkan pertukaran dan memastikan keperluan ketepatan permohonan anda dipenuhi.

Atas ialah kandungan terperinci Mengapa Terapung Tidak Boleh Digunakan sebagai Parameter Templat dalam C ?. 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