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

Bolehkah Anda Melewati Objek C ke Pembinanya Sendiri?

Linda Hamilton
Linda Hamiltonasal
2024-11-13 15:00:04261semak imbas

Can You Pass a C   Object into Its Own Constructor?

Melalukan Objek C ke dalam Pembinanya Sendiri

Dalam C , ia mungkin kelihatan berlawanan dengan intuisi tetapi sememangnya sah untuk menghantar objek C ke dalam pembina sendiri. Pertimbangkan coretan kod berikut:

#include <iostream>

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

int main(int argc, char** argv) {
    Foo foo(foo); // Surprising, yet valid
    std::cout << &foo << std::endl;
}

Dalam contoh ini, kami menghantar alamat objek Foo yang dibina (&foo) ke dalam pembinanya sendiri. Ini mungkin menyerupai definisi bulat, tetapi ia tidak dianggap kelakuan tidak ditentukan oleh piawaian C.

Penjelasan

Standard membenarkan kami menggunakan objek yang tidak dimulakan dengan cara yang terhad sebelum permulaan penuh mereka. Khususnya, mengikat rujukan kepadanya atau mengambil alamatnya adalah dibenarkan. Ini ditakrifkan dalam laporan kecacatan 363 dan seksyen 3.8 draf standard C 14.

Ini bermakna dalam kod di atas, kami tidak melanggar sebarang kekangan yang ditetapkan oleh bahasa tersebut. Kami hanya menggunakan objek foo yang tidak dimulakan dalam pembina dengan cara yang mematuhi piawai.

Amaran Clang

Walau bagaimanapun, perlu diperhatikan bahawa sesetengah penyusun seperti Clang mungkin mengeluarkan amaran tentang pembolehubah yang tidak dimulakan. Ini kerana menghasilkan nilai tidak tentu daripada pembolehubah automatik yang tidak dimulakan secara amnya dianggap sebagai tingkah laku tidak ditentukan. Walau bagaimanapun, dalam kes ini, kami tidak memperkenalkan ketidakpastian kerana kami hanya mengikat rujukan dan mengambil alamat dalam pembina.

Batasan

Adalah penting untuk ditekankan walaupun tingkah laku ini dibenarkan oleh standard, ia tidak boleh dianggap sebagai amalan yang baik atau mempunyai sebarang kes penggunaan praktikal. Niat utama perbincangan ini adalah untuk menjelaskan aspek semantik bahasa C yang kurang dikenali.

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