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

Mengapa Nilai Titik Terapung Tidak Boleh Digunakan sebagai Parameter Templat C?

Susan Sarandon
Susan Sarandonasal
2024-12-22 06:46:13425semak imbas

Why Can't Floating-Point Values Be Used as C   Template Parameters?

Mengapa Nilai Terapung Tidak Boleh Digunakan sebagai Parameter Templat?

Apabila cuba membuat instantiate templat kelas generik dengan nilai apungan sebagai parameter lalai, pengkompil boleh mengeluarkan ralat. Walaupun nilai integer berfungsi seperti yang diharapkan, terapung tidak berfungsi.

Had Standard untuk Argumen Titik Terapung

Menurut piawai C 11 (14.3.2/1), argumen templat bukan jenis untuk bukan -parameter templat jenis mesti mematuhi peraturan tertentu. Satu sekatan ialah ia tidak boleh menjadi nilai titik terapung. Sebaliknya, ia mestilah sama ada jenis kamiran atau penghitungan, ungkapan pemalar yang ditukar bagi jenis parameter templat atau binaan khusus lain.

Ketepatan Titik Terapung sebagai Faktor Penggerak

Penghadan ini mungkin berpunca daripada sifat pengiraan titik terapung yang tidak tepat. Mewakili nilai titik terapung dengan tepat tidak selalu boleh dilaksanakan, membawa kepada potensi ketidaktepatan yang boleh menyebabkan tingkah laku yang tidak dijangka. Pertimbangkan contoh berikut:

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

Walaupun bertujuan untuk memanggil fungsi yang sama dua kali, perwakilan titik terapung 1/3 dan 2/6 tidak dijamin sama kerana kemungkinan ralat pembundaran. Ini boleh membawa kepada seruan fungsi yang tidak diingini.

Pendekatan Alternatif

Jika matlamatnya adalah untuk mewakili nilai titik terapung dalam beberapa cara sebagai hujah templat, satu pilihan ialah menggunakan ungkapan malar C 11 (constexpr) . Ini membenarkan pengiraan pengangka dan penyebut nilai titik terapung pada masa penyusunan, yang kemudiannya boleh dihantar sebagai hujah integer yang berasingan.

Walau bagaimanapun, adalah penting untuk menentukan ambang untuk memastikan nilai titik terapung hampir dengan setiap yang lain berkongsi pasangan samamenumerator/penyebut. Jika tidak, rasional di sebalik mengehadkan nilai titik terapung sebagai argumen templat bukan jenis kekal sah.

Atas ialah kandungan terperinci Mengapa Nilai Titik Terapung Tidak Boleh Digunakan sebagai Parameter Templat 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