Rumah > pembangunan bahagian belakang > C++ > Mengapakah Saya Tidak Boleh Menggunakan Nombor Titik Terapung sebagai Parameter Templat C?

Mengapakah Saya Tidak Boleh Menggunakan Nombor Titik Terapung sebagai Parameter Templat C?

Patricia Arquette
Lepaskan: 2024-12-10 01:16:09
asal
1102 orang telah melayarinya

Why Can't I Use Floating-Point Numbers as C   Template Parameters?

Mengapa Nilai Terapung Tidak Dibenarkan sebagai Parameter Templat

Dalam C , cuba menggunakan nilai apungan sebagai parameter templat, seperti dalam kod berikut, menghasilkan ralat berikut:

GenericClass<float, 4.6f> gcFloat;
error: `float' is not a valid type for a template constant parameter
Salin selepas log masuk

Standard Larangan

Menurut piawaian C 11, argumen templat bukan jenis mestilah salah satu daripada yang berikut:

  • Ungkapan pemalar tertukar bagi jenis kamiran atau penghitungan
  • Nama parameter templat bukan jenis
  • Ungkapan yang menetapkan alamat objek statik atau fungsi
  • Penunjuk nol
  • Penunjuk ahli nol
  • Penunjuk kepada ahli

Nilai titik terapung, walau bagaimanapun, tidak sesuai dengan mana-mana daripada ini kategori.

Penaakulan

Sebab utama sekatan ini ialah sifat pengiraan titik terapung yang tidak tepat. Pengiraan titik terapung tidak dapat diwakili dengan tepat, yang boleh membawa kepada tingkah laku yang tidak dijangka apabila menggunakannya sebagai hujah templat. Sebagai contoh, kod berikut mungkin tidak berfungsi seperti yang dimaksudkan kerana potensi perbezaan pembundaran:

func<1/3.f>();
func<2/6.f>();
Salin selepas log masuk

Penyelesaian Alternatif

Untuk mewakili nilai titik terapung sebagai hujah templat, pertimbangkan menggunakan ungkapan pemalar lanjutan (constexpr) dalam C 11 untuk mengira pengangka dan penyebut nilai terapung pada masa penyusunan. Ini kemudiannya boleh diluluskan sebagai hujah integer yang berasingan. Walau bagaimanapun, adalah penting untuk menentukan ambang untuk memastikan nilai titik terapung yang berdekatan antara satu sama lain menghasilkan nisbah pengangka/penyebut yang sama.

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Menggunakan Nombor Titik Terapung sebagai Parameter Templat C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China 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