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
Linda Hamiltonasal
2024-10-28 14:28:301076semak imbas

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>

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>

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

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

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>

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!

Kenyataan:
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