Mengendalikan Ralat "Tidak Dapat Mengikat Rujukan Nilai L Bukan Kons" dalam Pembina C
Apabila cuba memulakan objek peribadi dalam pembina, menghadapi ralat "tidak boleh mengikat rujukan nilai bukan const jenis 'int&' kepada nilai rnilai jenis 'int'" boleh mengecewakan. Ralat ini berlaku apabila rujukan lvalue (alias kepada pembolehubah bernama) dijangka tetapi hujah yang diluluskan ialah rvalue (nilai sementara atau literal).
Dalam kod yang diberikan, ralat timbul kerana kelas Foo pembina mengambil parameter rujukan bukan const (int & x), yang mesti merujuk kepada nilai l. Walau bagaimanapun, fungsi genValue() mengembalikan nilai r, kerana ia mencipta pembolehubah int sementara yang dimusnahkan sebaik sahaja fungsi itu kembali.
Untuk menyelesaikan ralat ini, kita mesti mengelak daripada mengikat rujukan lvalue kepada nilai r. Berikut ialah pecahan beberapa penyelesaian yang berpotensi:
Pass by Value
Penyelesaian yang paling mudah ialah menghantar nilai yang dikembalikan oleh genValue() mengikut nilai kepada pembina Foo. Ini bermakna menukar pembina dalam kelas Foo daripada Foo(int &x) kepada Foo(int x).
Buat Pembolehubah Sementara
Sebagai alternatif, anda boleh mencipta sementara int pembolehubah di dalam pembina Bar, tetapkan hasil genValue() kepadanya, dan kemudian hantar rujukan kepada pembolehubah sementara itu kepada pembina Foo. Pendekatan ini memastikan bahawa nilai l tersedia untuk terikat pada rujukan bukan const.
Gunakan Penunjuk Pintar
Jika anda bersedia menggunakan penunjuk pintar, anda boleh cipta unique_ptr untuk mengurus jangka hayat objek Foo. Ini membolehkan anda menghantar penuding ke objek Foo kepada pembina Foo melalui rujukan, kerana ia adalah nilai l.
Dengan melaksanakan salah satu daripada penyelesaian ini, anda boleh mengendalikan ralat yang disebutkan di atas dengan berkesan dan memulakan Foo peribadi dengan betul objek dalam pembina Bar.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat \'Tidak Dapat Mengikat Rujukan Nilai Bukan Konst\' dalam Pembina C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!