Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Fungsi Operator Rakan Mendayakan Penukaran Jenis Tersirat dalam Templat C?

Bagaimanakah Fungsi Operator Rakan Mendayakan Penukaran Jenis Tersirat dalam Templat C?

Patricia Arquette
Patricia Arquetteasal
2024-11-17 04:29:03552semak imbas

How Can Friend Operator Functions Enable Implicit Type Conversions in C   Templates?

Penukaran Jenis Tersirat dalam Templat dengan Fungsi Operator Rakan

Untuk menggunakan penukaran jenis tersirat dengan templat, teknik yang kerap digunakan ialah takrifan fungsi rakan bukan ahli dalam takrifan kelas templat.

Dalam C , fungsi templat tidak dibuat seketika sehingga ia digunakan dengan jenis tertentu. Semasa resolusi beban lampau, pengkompil menyimpulkan jenis parameter templat dan menghapuskan sebarang templat yang tidak betul-betul sepadan dengan jenis hujah, tidak termasuk penukaran tersirat.

Penyelesaian terletak pada menggunakan fungsi pengendali rakan yang ditakrifkan dalam templat definisi kelas. Untuk setiap instantiasi templat, pengkompil menjana fungsi bukan templat percuma dengan tandatangan yang sepadan dengan jenis yang digantikan.

Sebagai contoh, pertimbangkan:

template <typename T>
class test {
    friend test operator+(test const &, test const &) {
        return test();
    }
};

Apabila templat dijadikan instantiated dengan int, pengkompil mencipta fungsi bukan templat:

test<int> operator+(test<int> const &, test<int> const &) {
    return test<int>();
}

Fungsi ini, tersedia melalui carian bergantung hujah, melakukan penukaran tersirat pada hujahnya. Ini kerana ia ditakrifkan di luar kelas templat dan tidak memerlukan padanan jenis yang tepat semasa peleraian beban lampau.

Oleh itu, penukaran jenis tersirat menjadi mungkin apabila memanggil operator pada objek ujian jenis, membenarkan ungkapan seperti:

A<3> a(4);
A<3> b = a + 5;
A<3> c = 5 + a;

Atas ialah kandungan terperinci Bagaimanakah Fungsi Operator Rakan Mendayakan Penukaran Jenis Tersirat dalam Templat C?. 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