Rumah >pembangunan bahagian belakang >C++ >Mengapa Jenis Pengganti Pengkompil tidak dalam Operator Penukaran?

Mengapa Jenis Pengganti Pengkompil tidak dalam Operator Penukaran?

Susan Sarandon
Susan Sarandonasal
2024-11-15 20:32:02563semak imbas

Why Doesn't the Compiler Substitute Type in Conversion Operators?

Memahami Operator Penukaran dalam C

Pertimbangkan coretan kod berikut:

template <class Type>
class smartref {
public:
    smartref() : data(new Type) { }
    operator Type&() { return *data; }
private:
    Type* data;
};

class person {
public:
    void think() { std::cout << "I am thinking"; }
};

int main() {
    smartref<person> p;
    p.think(); // Why doesn't the compiler try substituting Type?
}

Dalam C , operator penukaran bermain peranan penting dalam penukaran jenis. Jadi, bagaimana ia berfungsi?

1. Penukaran Semasa Menghantar Hujah:

Operator penukaran dipertimbangkan semasa menghantar hujah, mengikut peraturan permulaan salinan. Mereka menukar jenis sumber kepada mana-mana jenis yang serasi, tidak kira sama ada penukaran itu kepada rujukan atau tidak.

2. Penukaran kepada Rujukan:

Penukaran kepada rujukan dibenarkan dalam pengendali bersyarat jika jenis yang ditukar ialah lnilai. Selain itu, mengikat rujukan secara langsung juga mungkin melibatkan penukaran kepada rujukan.

3. Penukaran kepada Penunjuk Fungsi:

Penukaran yang ditentukan pengguna kepada penunjuk fungsi atau rujukan digunakan semasa membuat panggilan fungsi.

4. Penukaran kepada Jenis Bukan Kelas:

Penukaran tersirat, seperti kepada boolean, boleh menggunakan fungsi penukaran yang ditentukan pengguna.

5. Templat Fungsi Penukaran:

Templat boleh digunakan untuk mencipta fungsi penukaran yang menukar jenis kepada sebarang jenis penunjuk (kecuali penunjuk ahli).

Mengapa Pengkompil Tidak Jenis Pengganti?

Dalam contoh yang diberikan, pengkompil tidak menggantikan Jenis kerana pengendali penukaran dalam smartref mengembalikan penunjuk kepada ahli data dalaman. Apabila cuba memanggil think(), pengkompil membuat kesimpulan bahawa p ialah penunjuk kepada objek seseorang, bukan rujukan kepada objek seseorang. Oleh itu, ia tidak membuat sebarang penggantian jenis yang jelas.

Atas ialah kandungan terperinci Mengapa Jenis Pengganti Pengkompil tidak dalam Operator Penukaran?. 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