Rumah > pembangunan bahagian belakang > C++ > Bolehkah Anda Membina Objek C Menggunakan Dirinya sebagai Hujah?

Bolehkah Anda Membina Objek C Menggunakan Dirinya sebagai Hujah?

Mary-Kate Olsen
Lepaskan: 2024-11-10 18:45:02
asal
731 orang telah melayarinya

Can You Construct a C   Object Using Itself as an Argument?

Melalukan Objek C ke Pembina Sendiri: Adakah Ia Sah?

Nampaknya mengejutkan apabila mendapati bahawa membina objek daripada dirinya sendiri dalam C memang dibenarkan. Kod berikut menunjukkan tingkah laku yang tidak dijangka ini:

#include <iostream>

struct Foo {
    Foo(Foo& bar) {
        std::cout << &bar << std::endl;
    }
};

int main(int argc, char** argv) {
    Foo foo(foo); // This works!
    std::cout << &foo << std::endl; // And this works too...
}
Salin selepas log masuk

Dalam kod ini, objek jenis Foo dihantar sebagai hujah kepada pembinanya sendiri. Ini mungkin kelihatan seperti definisi bulat, tetapi piawaian C sebenarnya membenarkannya.

Walaupun objek foo tidak diinisialisasi, kod tersebut memanipulasinya mengikut cara yang dibenarkan oleh piawai. Khususnya, sebelum objek dimulakan sepenuhnya, mengikat rujukan kepadanya atau mengambil alamatnya dibenarkan.

Tingkah laku ini diterangkan selanjutnya dalam laporan kecacatan 363, yang menyimpulkan bahawa rujukan adalah sah dan ia dibenarkan untuk diambil alamat objek kelas sebelum ia dimulakan sepenuhnya dan sediakannya sebagai parameter rujukan.

Walaupun mungkin luar biasa atau tidak praktikal untuk menggunakan gelagat ini, ia memberikan cerapan tentang kerja dalaman kelas dan cara terhad di mana objek yang tidak dimulakan boleh dimanipulasi.

Atas ialah kandungan terperinci Bolehkah Anda Membina Objek C Menggunakan Dirinya sebagai Hujah?. 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