Rumah > pembangunan bahagian belakang > C++ > Mengapakah Nilai Titik Terapung Tidak Dibenarkan sebagai Parameter Templat C?

Mengapakah Nilai Titik Terapung Tidak Dibenarkan sebagai Parameter Templat C?

Linda Hamilton
Lepaskan: 2024-12-06 08:14:09
asal
758 orang telah melayarinya

Why Are Floating-Point Values Not Allowed as C   Template Parameters?

Mengapa Anda Tidak Boleh Menggunakan Nilai Terapung sebagai Parameter Templat?

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

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:

  1. Gunakan ungkapan malar (constexpr): Dengan C 11, anda boleh membina ungkapan pemalar masa kompilasi lanjutan yang mengira pengangka dan penyebut nilai titik terapung. Nilai integer ini kemudiannya boleh dihantar sebagai argumen yang berasingan kepada templat.
  2. Tentukan ambang: Wujudkan ambang toleransi supaya nilai titik terapung berdekatan antara satu sama lain menghasilkan pengangka yang sama/ pasangan penyebut. Ini memastikan ketekalan dalam penilaian hujah templat.

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!

sumber:php.cn
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