Rujukan Tidak Ditakrifkan kepada Statik Const Int: Memahami Gelagat Pengkompil
Pertimbangkan senario di mana anda mentakrifkan fungsi templat foo yang menerima rujukan kepada pemalar jenis T. Dalam Bar kelas, anda mengisytiharkan integer kConst pemalar statik. Apabila memanggil foo dengan kConst sebagai hujah, pengkompil mungkin membenderakan ralat "Rujukan tidak ditentukan kepada 'Bar::kConst'".
Ralat ini timbul kerana integer const statik, semasa dimulakan pada masa penyusunan, masih memerlukan definisi dalam program jika digunakan dalam cara tertentu. Menurut piawaian C (9.4.2/4), ahli data statik const boleh dimulakan dalam definisi kelasnya jika ia merupakan ungkapan pemalar integral. Walau bagaimanapun, pengisytiharannya sahaja tidak mencukupi untuk penggunaan dalam rujukan const atau ungkapan pemalar integral.
Apabila menghantar kConst dengan rujukan const kepada foo, anda secara berkesan "menggunakannya" mengikut standard (3.2/2) . Memandangkan GCC menganggap ahli data statik sebagai "digunakan", ia menuntut pelaksanaannya dalam skop program. Walau bagaimanapun, ia membenarkan kelonggaran dalam kes lulus nilai, apabila penukaran nilai-nilai berlaku serta-merta.
Selain itu, mengambil alamat atau merujuk objek yang tidak wujud secara amnya tidak digalakkan. Ahli data statik berada di lokasi memori yang unik dan menghantar alamat mereka daripada berbilang unit terjemahan boleh mengakibatkan tingkah laku yang tidak ditentukan melainkan objek ditakrifkan secara eksplisit dalam satu TU.
Ringkasnya, ralat pengkompil timbul disebabkan oleh keperluan untuk takrif integer const statik jika ia diluluskan oleh rujukan const atau digunakan dalam ungkapan malar. Adalah penting untuk mematuhi garis panduan standard untuk mengelakkan ralat sedemikian.
Atas ialah kandungan terperinci Mengapakah Meluluskan Integer Const Statik oleh Rujukan Const kepada Fungsi Templat Menyebabkan Ralat \'Rujukan Tidak Ditakrifkan\'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!