Rumah > pembangunan bahagian belakang > C++ > Bolehkah Anda Melewati Objek ke Pembinanya Sendiri dalam C?

Bolehkah Anda Melewati Objek ke Pembinanya Sendiri dalam C?

Patricia Arquette
Lepaskan: 2024-11-11 05:06:02
asal
305 orang telah melayarinya

Can You Pass an Object into Its Own Constructor in C  ?

Lepaskan Objek ke Pembina Sendiri dalam C

Sesetengah pengaturcara C telah menemui gelagat yang menarik: menghantar objek ke dalam pembinanya sendiri. Ini menimbulkan persoalan sama ada amalan sedemikian sah atau dianggap sebagai tingkah laku tidak ditentukan dalam C .

Pertimbangkan coretan kod berikut:

#include <iostream>

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

int main() {
    Foo foo(foo); // Surprisingly, this compiles and executes
    std::cout << &foo << std::endl;
}
Salin selepas log masuk

Dalam kod ini, pembina Foo menerima rujukan kepada objek yang dibina itu sendiri sebelum objek dimulakan sepenuhnya. Walaupun objek tidak dimulakan, kod itu dibenarkan oleh piawai C.

Seksyen 3.8 piawaian draf C 14 menjelaskan bahawa sebelum hayat objek bermula (atau selepas ia tamat), ia dibenarkan untuk mengambil alamatnya atau mengikat rujukan kepadanya selagi rujukan boleh mengikat secara langsung. Tingkah laku tidak ditentukan berlaku hanya apabila operasi tertentu, seperti penukaran lnilai kepada nilai, mengakses ahli data bukan statik atau pengikatan kelas asas maya, dilakukan pada objek yang dimulakan separa tersebut.

Contoh kod yang diberikan tidak melanggar mana-mana sekatan ini. Kami hanya mengikat rujukan dan mendapatkan alamat dalam pembina, yang dibenarkan.

Isu aktif 453, bagaimanapun, menimbulkan kebimbangan tentang kesahihan rujukan mengikat kepada objek yang tidak diinisialisasi. Bahasa cadangan awal menyokong Defect Report 363, yang membenarkan pengikatan seperti yang ditunjukkan dalam coretan kod.

Walaupun tingkah laku ini mungkin kelihatan ganjil pada mulanya, ia adalah hasil daripada pengkompil yang memperuntukkan ruang untuk objek sebelum pemulaan. Ini membenarkan operasi terhad, seperti pengikatan rujukan dan pengambilan alamat, tanpa menghasilkan nilai yang tidak tentu.

Atas ialah kandungan terperinci Bolehkah Anda Melewati Objek ke Pembinanya Sendiri dalam C?. 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