Rasional
Piawaian C secara jelas melarang penggunaan nilai titik terapung sebagai parameter templat bukan jenis. Sekatan ini digariskan dalam bahagian 14.3.2/1 piawaian C 11, yang menyatakan bahawa argumen templat bukan jenis mesti mematuhi jenis tertentu, termasuk ungkapan pemalar ditukar bagi jenis kamiran atau penghitungan.
Sebabnya
Sekatan ini berpunca daripada ketidaktepatan yang wujud pada titik terapung pengiraan. Tidak seperti integer, nilai titik terapung tidak boleh diwakili dengan tepat, yang membawa kepada kemungkinan ketidaktepatan semasa menjalankan operasi atau membuat perbandingan.
Implikasi
Pertimbangkan coretan kod berikut:
func<1/3.f>(); func<2/6.f>();
Walaupun niatnya adalah untuk memanggil fungsi yang sama dua kali, tetapi perwakilan titik terapung bagi nilai ini mungkin tidak sama. Ini boleh mengakibatkan tingkah laku yang salah atau tidak dijangka, kerana seruan fungsi tidak akan dianggap sama.
Pendekatan Alternatif
Untuk mewakili nilai titik terapung sebagai hujah templat, pertimbangkan pendekatan berikut:
Ingat, sebab utama untuk tidak membenarkan hujah templat titik terapung adalah untuk mengelakkan kemungkinan ralat yang timbul daripada ketidaktepatan pengiraan titik terapung. Dengan menggunakan pendekatan alternatif, anda boleh mengatasi had ini sambil mengekalkan ketepatan dan kebolehramalan.
Atas ialah kandungan terperinci Mengapakah Nilai Titik Terapung Tidak Dibenarkan sebagai Parameter Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!