Rumah >pembangunan bahagian belakang >C++ >Bilakah C Melangkau Pembina Salin?

Bilakah C Melangkau Pembina Salin?

Linda Hamilton
Linda Hamiltonasal
2024-12-21 08:10:10186semak imbas

When Does C   Skip the Copy Constructor?

Salin Pengoptimuman Pembina dalam C

Dalam C , dalam keadaan tertentu, pembina salinan mungkin tidak digunakan, menimbulkan persoalan tentang pengoptimuman pengkompil atau ciri bahasa yang tidak didokumentasikan.

Pertimbangkan perkara berikut kod:

class A
{
public:
    A(int value) : value_(value)
    {
        cout << "Regular constructor" << endl;
    }

    A(const A& other) : value_(other.value_)
    {
        cout << "Copy constructor" << endl;
    }

private:
    int value_;
};

int main()
{
    A a = A(5);
}

Orang akan menjangkakan output untuk memasukkan kedua-dua mesej "Pembina biasa" dan "Salin pembina". Walau bagaimanapun, dalam kes ini, pembina salinan tidak pernah dipanggil.

Tingkah laku ini bukan pengoptimuman pengkompil mahupun ciri tidak berdokumen C . Sebaliknya, ia dinyatakan secara eksplisit dalam piawaian C (§12.8.15) bahawa tugasan seperti T = x; boleh ditafsirkan sebagai T(x);, dengan berkesan menghapuskan T dalaman apabila tidak memerlukan salinan.

Dalam kes ini, pengkompil mengiktiraf bahawa membina objek A dan kemudian menyalinnya adalah berlebihan dan oleh itu meninggalkan panggilan pembina salin.

Untuk menguatkuasakan seruan pembina salin, seseorang boleh mencipta A pertama secara eksplisit objek:

A a; // Construct an empty A object
a = A(5); // Copy-initialize it with another A object

Atas ialah kandungan terperinci Bilakah C Melangkau Pembina Salin?. 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