Pembolehubah Ahli Statik dalam C : Permulaan Di Luar Kelas
Walaupun nampaknya berlawanan dengan intuisi, permulaan pembolehubah ahli statik dalam C berlaku di luar kelas atas beberapa sebab logik.
Peraturan Satu Definisi Pematuhan
Ahli statik mesti ditakrifkan dalam satu unit terjemahan, mematuhi Peraturan Satu Definisi. Jika permulaan dibenarkan dalam kelas, ia akan membawa kepada berbilang takrifan pembolehubah yang sama dalam unit terjemahan yang berbeza, melanggar peraturan ini.
Contoh:
Pertimbangkan perkara berikut coretan kod:
struct Gizmo { static string name = "Foo"; // Not allowed };
Jika permulaan ini dibenarkan, nama pembolehubah akan ditakrifkan dalam setiap unit terjemahan yang merangkumi fail pengepala, melanggar Peraturan Satu Definisi.
Membenarkan Permulaan Dalam Kelas
Walaupun membenarkan pemulaan dalam kelas mungkin kelihatan lebih intuitif, ia masih memerlukan yang berasingan definisi untuk memastikan Peraturan Satu Definisi dikuatkuasakan. Oleh itu, membenarkan pemulaan dalam kelas hanya akan menambah sintaks tanpa memberikan apa-apa faedah sebenar.
Alternatif untuk Nilai Kamiran
Untuk ahli statik kamiran, C membenarkan permulaan dalam pengisytiharan jika ungkapannya ialah:
Ini membolehkan pintasan sintaksis yang memudahkan untuk menentukan ahli statik kamiran dengan satu baris kod. Walau bagaimanapun, definisi dalam unit terjemahan yang berasingan masih diperlukan.
Contoh:
struct Gizmo { static const int count = 42; // Allowed };
Dalam kes ini, pengkompil menjana definisi yang diperlukan di luar kelas untuk mematuhi Peraturan Satu Definisi.
Atas ialah kandungan terperinci Mengapa Mesti Permulaan Pembolehubah Ahli Statik dalam C Berlaku Di Luar Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!