Rumah >pembangunan bahagian belakang >C++ >Adakah terdapat setara C untuk blok statik Java, dan bagaimanakah tingkah laku serupa boleh dicapai?
Soalan:
Di Java, blok statik digunakan untuk memulakan ahli statik kelas . Walau bagaimanapun, nampaknya C tidak menyediakan ciri yang serupa. Adakah terdapat simpulan bahasa C yang meniru kelakuan blok statik Java?
Jawapan:
Walaupun blok statik dalam pengertian Java tidak wujud dalam C , terdapat teknik untuk mencapai tingkah laku yang sama di luar kelas. Blok kod statik boleh dilaksanakan pada skop unit terjemahan menggunakan gabungan makro dan pembolehubah tiruan.
Untuk Permulaan pada Beban Proses:
<code class="cpp">static_block { // Initialization code goes here }</code>
Untuk Permulaan pada Instantiation Kelas Pertama:
<code class="cpp">class StaticInitialized { private: static bool staticsInitialized = false; private: virtual void initializeStatics() = 0; public: StaticInitialized() { if (!staticsInitialized) { initializeStatics(); staticsInitialized = true; } } }; class MyClass : private StaticInitialized { public: static int field1; static int field2; private: void initializeStatics() { // Initialization code goes here } };</code>
Kelas asas StaticInitialized memastikan bahawa initializeStatics() dipanggil sekali sahaja apabila tika pertama MyClass dicipta.
Penggunaan:
Makro static_block boleh digunakan untuk mencipta blok statik yang dilaksanakan sebelum main().
Pelaksanaan:
Pelaksanaan melibatkan pembolehubah dummy yang dimulakan dengan panggilan fungsi. Kod blok statik ialah badan fungsi. Makro digunakan untuk menjana pengecam unik untuk mengelakkan perlanggaran nama.
Nota:
Atas ialah kandungan terperinci Adakah terdapat setara C untuk blok statik Java, dan bagaimanakah tingkah laku serupa boleh dicapai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!