Dalam C , data statik ahli dalam kelas tidak boleh dimulakan secara langsung dalam definisi kelas, kecuali untuk khusus tertentu kes.
Ahli data statik diperuntukkan dalam segmen memori program dan dikongsi antara semua kejadian kelas. Piawaian C melarang permulaan dalam kelas mereka untuk menghalang berbilang takrifan pembolehubah yang sama dalam berbilang unit terjemahan.
Begitu juga, tatasusunan statik dalam kelas tidak boleh dimulakan dalam kelas kerana tatasusunan menduduki blok memori bersebelahan. Membenarkan pemulaan dalam kelas akan membawa kepada berbilang salinan tatasusunan yang sama dibuat dalam setiap unit terjemahan, mengakibatkan tingkah laku yang tidak dijangka.
Pengecualian kepada peraturan ini dibuat untuk jenis kamiran const statik dan jenis penghitungan. Jenis ini boleh dimulakan dalam kelas kerana ia dianggap sebagai pemalar masa kompilasi dan nilainya diketahui pada saat penyusunan.
Untuk memulakan tatasusunan statik dalam kelas, anda boleh menggunakan "enum muslihat":
enum { arrsize = 2 };
static const int c[arrsize] = { 1, 2 };
Pendekatan ini mengisytiharkan arrsize enumerasi kepada tentukan saiz tatasusunan, yang kemudiannya digunakan untuk memulakan tatasusunan const statik c.
C 11 telah melonggarkan sedikit sekatan ini. Kini, ahli data statik jenis tertentu, yang dikenali sebagai "jenis literal," boleh dimulakan dalam kelas menggunakan pendakap atau pemula-sama. Selain itu, C 11 membenarkan ahli data bukan statik dimulakan dalam kelas menggunakan ungkapan malar.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Ahli Statik dan Tatasusunan Secara Terus dalam Kelas C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!