Permulaan Pembolehubah Ahli Statik dalam C : Mengapa Di Luar Kelas?
Dalam C , pembolehubah ahli statik dimulakan di luar pengisytiharan kelas. Penyimpangan daripada pemulaan dalam kelas yang lebih intuitif ini telah mencetuskan rasa ingin tahu dalam kalangan pembangun. Adakah terdapat sebab logik di sebalik keputusan reka bentuk ini?
Sebab asasnya terletak pada keperluan untuk ahli statik ditakrifkan dalam tepat satu unit terjemahan. Jika permulaan dibenarkan dalam kelas, ia boleh membawa kepada berbilang takrifan pembolehubah yang sama dalam unit terjemahan yang berbeza, melanggar Peraturan Satu Definisi.
Untuk menggambarkan ini, pertimbangkan contoh berikut:
struct Gizmo { static string name = "Foo"; };
Jika kod ini dibenarkan, nama akan ditakrifkan dalam setiap unit terjemahan yang termasuk fail pengepala ini. Ini bercanggah dengan Peraturan Satu Definisi, yang memberi mandat bahawa pembolehubah hanya boleh mempunyai satu takrifan.
Walau bagaimanapun, C menyediakan gula sintaksis yang membenarkan permulaan ahli statik kamiran dalam perisytiharan:
struct Gizmo { static const int count = 42; };
Ini dibenarkan selagi ungkapan itu merupakan integral const atau jenis penghitungan, boleh dinilai pada masa penyusunan, dan masih ada definisi dalam satu unit terjemahan yang tidak melanggar Peraturan Satu Definisi. Contohnya:
// gizmo.cpp #include "gizmo.h" const int Gizmo::count;
Atas ialah kandungan terperinci Mengapa Memulakan Pembolehubah Ahli Statik C Di Luar Pengisytiharan Kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!