Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Memulakan Medan `const` dalam Pembina Secara Terus dalam C ?

Mengapa Saya Tidak Boleh Memulakan Medan `const` dalam Pembina Secara Terus dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-11-03 12:50:31208semak imbas

Why Can't I Initialize a `const` Field in a Constructor Directly in C  ?

Memulakan Medan Konst dalam Pembina

Apabila menentukan kelas dengan medan const yang mesti kekal tidak berubah sepanjang hayat objek, adalah penting untuk memulakan ia dengan betul. Pertimbangkan senario berikut:

Pernyataan Masalah:

Anda ingin mencipta Bar kelas C yang menerima penuding Foo sebagai input dan mengekalkan rujukan tidak berubah kepadanya dalam seumur hidup. Kod berikut gagal untuk disusun:

<code class="cpp">class Foo;

class Bar {
public:
    Foo * const foo;
    Bar(Foo* foo) {
        this->foo = foo;
    }
};

class Foo {
public:
  int a;
};</code>

Penyelesaian:

Untuk memulakan medan const dengan betul dalam pembina, anda perlu menggunakan senarai pemula:

<code class="cpp">Bar(Foo* _foo) : foo(_foo) {
}</code>

Perhatikan bahawa kami telah menamakan semula parameter masuk kepada _foo untuk mengelakkan konflik nama.

Pendekatan ini memastikan bahawa penuding foo dimulakan sebaik sahaja objek Bar dibina dan ia kekal tidak berubah untuk tempoh kitaran hayatnya.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Medan `const` dalam Pembina Secara Terus dalam C ?. 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