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
Lepaskan: 2024-12-15 00:39:10
asal
531 orang telah melayarinya

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
};
Salin selepas log masuk

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
};
Salin selepas log masuk

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!

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