Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Memulakan Ahli Statik Bukan Konst Di Dalam Kelas C?

Mengapa Saya Tidak Boleh Memulakan Ahli Statik Bukan Konst Di Dalam Kelas C?

Patricia Arquette
Patricia Arquetteasal
2024-12-12 16:19:11812semak imbas

Why Can't I Initialize Non-Const Static Members Inside a C   Class?

Permulaan Dalam Kelas Ahli Statik dalam C

Dalam C , mentakrifkan pembolehubah ahli statik di dalam perisytiharan kelas adalah tidak dibenarkan. Tindakan ini mengakibatkan ralat penyusunan "ISO C melarang permulaan dalam kelas bagi ahli statik bukan const `j'".

Sebab Larangan:

  • Kecekapan Kod: Memulakan ahli statik dalam perisytiharan kelas boleh menyebabkan pendua takrifan apabila kelas disertakan dalam berbilang unit kompilasi.
  • Kawalan ke atas Permulaan: Ahli statik selalunya memerlukan logik pemulaan khusus, yang tidak boleh dijamin apabila mereka dimulakan sebaris dalam perisytiharan kelas.

Pengecualian untuk Const Ahli:

Ahli statik Const dibenarkan untuk dimulakan dalam pengisytiharan kelas kerana mereka tidak diubah suai selepas pemulaan. Ini memastikan kecekapan kod dan menghapuskan keperluan untuk pemulaan eksplisit.

Implikasi untuk Nilai Standard:

Dalam C, pembolehubah statik dimulakan secara automatik kepada 0 jika ia tidak dinyatakan secara eksplisit dimulakan. Walau bagaimanapun, dalam C , pembolehubah statik tidak dimulakan secara automatik. Anda mesti memulakannya secara manual sama ada dalam pengisytiharan kelas (untuk ahli const) atau dalam fail .cpp yang berasingan.

Penyelesaian:

Untuk menentukan statik bukan const pembolehubah ahli dalam C , anda harus memulakannya dalam fail .cpp yang berasingan dan bukannya dalam pengisytiharan kelas.

Untuk contoh:

// Header file
class Test {
 public:
  static int j;
};

// .cpp file
int Test::j = 0;

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Memulakan Ahli Statik Bukan Konst Di Dalam Kelas C?. 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