Rumah > pembangunan bahagian belakang > C++ > Mengapa Memulakan Pembolehubah Ahli Statik C Di Luar Pengisytiharan Kelas?

Mengapa Memulakan Pembolehubah Ahli Statik C Di Luar Pengisytiharan Kelas?

Barbara Streisand
Lepaskan: 2024-12-25 15:11:21
asal
791 orang telah melayarinya

Why Initialize C   Static Member Variables Outside the Class Declaration?

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

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

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

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!

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