Rumah >pembangunan bahagian belakang >C++ >Mengapakah Ahli Data Statik C Mesti Ditakrifkan di Luar Kelas?

Mengapakah Ahli Data Statik C Mesti Ditakrifkan di Luar Kelas?

Linda Hamilton
Linda Hamiltonasal
2024-12-10 09:40:11531semak imbas

Why Must C   Static Data Members Be Defined Outside the Class?

Keperluan Menentukan Ahli Data Statik Secara Luaran kepada Kelas

Dalam alam C , ahli data statik berada dalam kelas tetapi melangkaui sempadannya, memerlukan definisi di luar kelas itu sendiri. Seperti yang disahkan oleh pusat pengetahuan C IBM, "Pengisytiharan ahli data statik dalam senarai ahli kelas bukanlah definisi... [ia] mesti menentukan ahli statik di luar perisytiharan kelas, dalam skop ruang nama." Mengapa peraturan ini dikuatkuasakan? Apakah pertimbangan peruntukan memori asas yang memerlukan amalan ini?

Prinsip di sebalik mandat ini terletak pada asas "Peraturan Satu Definisi" bahasa itu. Peraturan ini menetapkan bahawa semua objek statik yang digunakan dalam program mesti mempunyai satu definisi dan hanya satu. Takrifan kelas, biasanya disimpan dalam fail pengepala, sering digabungkan merentasi berbilang unit terjemahan (fail sumber). Sekiranya pengisytiharan objek statik diletakkan dalam pengepala, setiap unit yang disertakan akan menghasilkan takrifan yang berasingan, secara langsung melanggar Peraturan Satu Definisi.

Untuk mengelakkan bahaya ini, definisi kelas dalam pengepala hanya mengisytiharkan ahli data statik tanpa mentakrifkannya . Ini memaksa pengaturcara untuk memberikan definisi yang jelas di tempat lain. Walaupun secara teorinya mungkin bagi bahasa untuk menyatukan berbilang definisi menjadi satu, seperti yang dilakukan dengan fungsi sebaris, ini tidak berlaku dengan ahli data statik. Oleh itu, kita ditinggalkan dengan keperluan bahasa untuk definisi luaran ahli data statik.

Atas ialah kandungan terperinci Mengapakah Ahli Data Statik C Mesti Ditakrifkan di Luar 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