Rumah >pembangunan bahagian belakang >C++ >Mengapa Mesti Permulaan Pembolehubah Ahli Statik dalam C Berlaku Di Luar Kelas?

Mengapa Mesti Permulaan Pembolehubah Ahli Statik dalam C Berlaku Di Luar Kelas?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-15 00:39:10532semak imbas

Why Must Static Member Variable Initialization in C   Occur Outside the Class?

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:

  • Const integral atau enumeration taip
  • Boleh dinilai pada masa kompilasi

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!

Kenyataan:
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