Rumah > pembangunan bahagian belakang > C++ > Mengapa Potongan Templat Gagal dengan Penukaran Jenis Tersirat untuk Jenis Ditentukan Pengguna?

Mengapa Potongan Templat Gagal dengan Penukaran Jenis Tersirat untuk Jenis Ditentukan Pengguna?

Linda Hamilton
Lepaskan: 2024-10-28 14:28:30
asal
1088 orang telah melayarinya

Why Does Template Deduction Fail with Implicit Type Conversion for User-Defined Types?

Penukaran Jenis Tersirat dan Potongan Templat

Apabila cuba menukar int secara tersirat kepada Skalar objek dalam panggilan fungsi templat, potongan hujah templat mungkin gagal. Ini berlaku kerana potongan hujah templat tidak secara automatik mengambil kira penukaran yang ditentukan pengguna, seperti penukaran antara int dan Skalar.

Dalam kod yang disediakan:

<code class="cpp">func(a, 2);</code>
Salin selepas log masuk

pengkompil cuba untuk secara tersirat menukar int 2 kepada Skalar objek, tetapi potongan hujah templat gagal kerana ia tidak mempertimbangkan penukaran yang ditentukan pengguna. Untuk menyelesaikan masalah ini, hujah mesti ditukar secara eksplisit di tapak pemanggil:

<code class="cpp">func(a, Scalar<int>{2}); // C++14</code>
Salin selepas log masuk

Sebagai alternatif, jika C 17 digunakan, panduan potongan boleh ditakrifkan untuk Skalar, membenarkan sintaks berikut:

<code class="cpp">func(a, Scalar{2});</code>
Salin selepas log masuk

Akhir sekali, instantiasi eksplisit bagi fungsi templat dengan hujah jenis yang ditentukan juga boleh memintas keperluan untuk penukaran tersirat:

<code class="cpp">func<int>(a, 2); // Assuming Scalar<T>::Scalar(T) is not explicit</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Potongan Templat Gagal dengan Penukaran Jenis Tersirat untuk Jenis Ditentukan Pengguna?. 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