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... }
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!