Rumah > pembangunan bahagian belakang > C++ > Adakah Semua Fungsi Variadik Menggalakkan Hujah `terapung` kepada `menggandakan`?

Adakah Semua Fungsi Variadik Menggalakkan Hujah `terapung` kepada `menggandakan`?

Barbara Streisand
Lepaskan: 2024-11-23 06:21:16
asal
780 orang telah melayarinya

Do All Variadic Functions Promote `float` Arguments to `double`?

Promosi Argumen Terapung kepada Berganda dalam Fungsi Variadik

Dalam perbincangan sebelum ini, telah diperhatikan bahawa printf() mempromosikan hujah terapung kepada ganda sebelum menerimanya. Ini menimbulkan persoalan: adakah semua fungsi variadic melaksanakan promosi ini?

Promosi Argumen Variadic

Ya, mengikut piawaian C99 dan C, argumen apungan diserahkan kepada variadic fungsi dinaikkan kepada dua kali ganda.

Standard Spesifikasi

  • C99 (bahagian 6.5.2.2): "argumen yang mempunyai jenis apungan dinaikkan kepada dua kali ganda."
  • C ( seksyen 5.2.2): "jenis titik terapung... ditukar kepada jenis digalakkan sebelum panggilan."
  • C (bahagian 4.6): "Nilai apungan jenis boleh ditukar kepada nilai dua jenis Nilai tidak berubah."

cppreference pada Penukaran Fungsi Variadic

cppreference menyediakan ringkasan penukaran lalai untuk fungsi variadic dalam C :

  • std::nullptr_t to void*
  • Float arguments to double
  • Promosi integer untuk bool, char , pendek, dan penghitungan

Asal Promosi

Promosi ini diperkenalkan dalam C untuk keserasian dengan standard K&R C, walaupun terdapat potensi kelemahannya. Seperti yang dinyatakan oleh Rasional C:

"Untuk keserasian dengan amalan lepas, semua promosi hujah berlaku seperti yang diterangkan dalam K&R tanpa adanya pengisytiharan prototaip, termasuk promosi terapung yang tidak selalu diingini menjadi dua kali ganda."

Atas ialah kandungan terperinci Adakah Semua Fungsi Variadik Menggalakkan Hujah `terapung` kepada `menggandakan`?. 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