Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Memulakan Ahli Statik dan Tatasusunan Secara Terus dalam Kelas C?

Mengapa Saya Tidak Boleh Memulakan Ahli Statik dan Tatasusunan Secara Terus dalam Kelas C?

Linda Hamilton
Lepaskan: 2024-12-08 06:08:11
asal
732 orang telah melayarinya

Why Can't I Initialize Static Members and Arrays Directly in a C   Class?

Mengapa Saya Tidak Boleh Memulakan Ahli Statik Bukan Konst atau Tatasusunan Statik dalam Kelas?

Dalam C , data statik ahli dalam kelas tidak boleh dimulakan secara langsung dalam definisi kelas, kecuali untuk khusus tertentu kes.

Sebab untuk Mengehadkan Permulaan Ahli Statik Bukan Konst

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.

Sebab untuk Mengehadkan Permulaan Tatasusunan Statik

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 untuk Const Integral dan Jenis Enum

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.

Penyelesaian untuk Permulaan Tatasusunan

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.

Evolusi dalam C 11

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan