Rumah > pembangunan bahagian belakang > C++ > Mengapa Melepasi Const Int Statik melalui Rujukan Menyebabkan Ralat \'Rujukan Tidak Ditakrifkan\' dalam C ?

Mengapa Melepasi Const Int Statik melalui Rujukan Menyebabkan Ralat \'Rujukan Tidak Ditakrifkan\' dalam C ?

Linda Hamilton
Lepaskan: 2024-10-29 19:02:02
asal
760 orang telah melayarinya

Why Does Passing a Static Const Int by Reference Cause an

Rujukan Tidak Ditakrifkan kepada Static Const Int: A Resolution

Dalam senario pengaturcaraan baru-baru ini, ralat kompilasi muncul dengan mesej "Rujukan tidak ditentukan kepada 'Bar::kConst'". Ralat berasal daripada coretan kod berikut:

class Bar
{
public:
   static const int kConst = 1;
   void func()
   {
      foo(kConst);           // Error-prone line
   }
};
Salin selepas log masuk

Ralat timbul kerana ahli pemalar statik "kConst" tidak ditakrifkan. Biasanya, pengkompil dijangka membuat penggantian yang diperlukan pada masa penyusunan. Walau bagaimanapun, dalam kes ini, fungsi "foo" mengambil parameter "const int &", menyebabkan pengkompil memihak kepada rujukan berbanding penggantian.

Untuk menyelesaikan isu, pengubahsuaian berikut boleh digunakan:

foo(static_cast<int>(kConst));
Salin selepas log masuk

Pendekatan ini memaksa pengkompil untuk mencipta "int" sementara dan memberikan rujukan kepadanya, membolehkan penyusunan berjaya.

Tingkah laku yang diperhatikan adalah disengajakan, seperti yang dinyatakan dalam piawaian C ( 9.4.2/4), yang menyatakan bahawa apabila ahli data statik jenis kamiran malar mempunyai pemula malar, ia boleh muncul dalam ungkapan pemalar kamiran. Walau bagaimanapun, ia masih mesti ditakrifkan dalam skop ruang nama jika digunakan dalam atur cara.

Dalam kod yang diberikan, menghantar ahli data statik dengan rujukan tetap merupakan "penggunaan" mengikut piawaian C (3.2/2). Ini bermakna bahawa pengkompil bertanggungjawab untuk menguatkuasakan kehadiran definisi untuk "kConst".

Walaupun GCC kadangkala mengabaikan keperluan ini dalam senario tertentu, secara amnya adalah dinasihatkan untuk mematuhi piawaian dan mengelak daripada menggunakan rujukan kepada atau mengambil alamat objek yang tidak wujud.

Atas ialah kandungan terperinci Mengapa Melepasi Const Int Statik melalui Rujukan Menyebabkan Ralat \'Rujukan Tidak Ditakrifkan\' dalam C ?. 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