Kesukaran Memulakan Ahli Bukan Konst Statik dan Tatasusunan Statik dalam Kelas
Dalam C , cuba untuk memulakan ahli statik bukan const atau tatasusunan statik terus dalam definisi kelas selalunya mengakibatkan ralat pengkompil. Artikel ini mengkaji sebab di sebalik pengehadan ini dan membentangkan penyelesaian untuk mencapai kefungsian yang diingini.
Mengapa saya tidak boleh memulakan ahli data statik dalam kelas?
Menurut piawaian C, ahli data statik boleh hanya boleh dimulakan dalam takrifan kelas jika ia daripada jenis kamiran atau penghitungan. Sekatan ini memastikan perkara berikut:
-
Definisi Unik: Definisi kelas biasanya disertakan dalam fail pengepala, yang boleh digabungkan ke dalam berbilang unit terjemahan. Untuk mengelakkan definisi objek pendua, C memerlukan setiap objek mempunyai definisi yang unik. Inisialisasi dalam kelas objek yang memerlukan storan dalam memori akan melanggar peraturan ini.
Mengapa hanya jenis & enum kamiran const statik sahaja dibenarkan Permulaan Dalam Kelas?
- Storan Objek: Ahli kamiran const statik dianggap sebagai pemalar masa kompilasi dan boleh dioptimumkan oleh pengkompil. Dengan membenarkan pengamulaan dalam kelas mereka, pengkompil boleh menghapuskan keperluan untuk menyimpannya dalam ingatan, sekali gus mengelak sekatan yang disebutkan di atas.
-
Kebolehkuatkuasaan: Penghitungan dibenarkan untuk permulaan dalam kelas ini kerana ia nilai boleh digunakan terus sebagai ganti integer.
Bagaimana pula dengan statik tatasusunan dalam kelas?
Pemulaan tatasusunan statik dalam kelas adalah dilarang atas sebab yang sama yang digunakan untuk ahli bukan const statik. Selain itu, walaupun memulakan tatasusunan const statik dalam kelas adalah tidak dibenarkan kerana:
-
Kemalar Terhad: Tatasusunan const statik hanya malar berkenaan dengan elemennya, bukan saiznya. Ini bermakna pengkompil tidak boleh menganggapnya sebagai pemalar masa kompilasi dan mengoptimumkannya dengan cekap.
Penyelesaian
Untuk memulakan tatasusunan statik atau ahli bukan const dalam kelas, teknik berikut boleh bekerja:
-
Tipu Enum: Gunakan enum dengan pemalar yang ditentukan untuk saiz tatasusunan dan elemen.
-
Definisi Luar Kelas: Takrifkan pembolehubah statik di luar definisi kelas dalam skop ruang nama, membenarkan kedua-dua ahli statik bukan const dan permulaan tatasusunan statik.
C 11 Evolution
C 11 longgar sekatan dengan membenarkan permulaan ahli data bukan statik dalam pengisytiharan kelas dan permulaan ahli literal const statik dengan ungkapan malar. Walau bagaimanapun, ciri ini mungkin belum disokong dalam semua penyusun lagi.
Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Memulakan Secara Langsung Ahli Bukan Konst Statik dan Tatasusunan Statik dalam Kelas 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