Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Permulaan Ahli Data Statik Mesti Berlaku di Luar Definisi Kelas?

Mengapa Permulaan Ahli Data Statik Mesti Berlaku di Luar Definisi Kelas?

Linda Hamilton
Linda Hamiltonasal
2024-11-05 19:57:02351semak imbas

Why Must Static Data Member Initialization Happen Outside the Class Definition?

Memahami Permulaan Ahli Data Statik

Satu aspek pemula bagi permulaan ahli data statik ialah penempatannya di luar kelas. Ini menimbulkan persoalan tentang mengapa ini perlu dan sifat pengisytiharan dan takrifan ahli data statik.

Sebab Permulaan Di Luar Kelas

Data statik ahli, tidak seperti ahli bukan statik, wujud secara bebas daripada sebarang contoh tertentu kelas. Mereka mempunyai alamat tetap dalam ingatan dan seumur hidup mereka merangkumi keseluruhan program. Untuk memastikan bahawa hanya terdapat satu takrifan ahli data statik, takrifannya mestilah di luar takrifan kelas. Ini kerana definisi kelas biasanya disertakan dalam fail pengepala, yang mungkin disertakan dalam berbilang fail objek. Jika takrifan ahli data statik dibenarkan dalam kelas, ia akan membawa kepada berbilang takrifan pembolehubah yang sama, menyebabkan ralat pemaut.

Pengisytiharan lwn. Definisi

Dalam definisi kelas, seseorang boleh menyediakan pemula untuk ahli data statik. Walau bagaimanapun, ini hanyalah pengisytiharan dengan pemula, bukan definisi. Definisi dalam C memerlukan peruntukan memori dengan alamat tertentu. Memandangkan alamat ahli data statik bergantung pada lokasinya dalam ingatan dan fakta bahawa ia dikongsi antara semua kejadian kelas, takrifannya mesti berlaku di luar kelas.

Contoh

Pertimbangkan kod berikut:

<code class="cpp">class X {
    int normalValue = 5; // Non-static data member initialization
    static int i;
};

int X::i = 0; // Definition of the static data member</code>

Di sini, pengisytiharan ahli data statik i berada di dalam definisi kelas, tetapi takrifannya berada di luar kelas. Ini adalah perlu kerana ia memastikan bahawa hanya terdapat satu takrifan i dan ia mempunyai alamat unik dalam ingatan.

Pada dasarnya, sementara NSDMI membenarkan pengamulaan ahli data statik yang lebih mudah dalam kelas, takrifan mereka mesti masih disediakan secara berasingan untuk mengelakkan pelbagai definisi dalam program yang disusun. Pengisytiharan dan takrifan ahli data statik mempunyai tujuan yang berbeza, memerlukan penempatan mereka di luar kelas untuk pengurusan memori yang betul dan pencegahan ralat pemautan.

Atas ialah kandungan terperinci Mengapa Permulaan Ahli Data Statik Mesti Berlaku di Luar Definisi Kelas?. 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