


Mengapa Saya Tidak Boleh Melewati Objek C Sementara kepada Rujukan Bukan Const?
Melalui Objek Sementara sebagai Rujukan
Dalam C , menggunakan objek sementara sebagai rujukan boleh membawa kepada tingkah laku yang tidak dijangka. Untuk mengelakkan ini, pengkompil menguatkuasakan sekatan untuk menghantar objek sementara kepada parameter rujukan.
Apabila menyusun kod yang disediakan dalam pertanyaan awal:
class Foo { public: Foo(int x) {}; }; void ProcessFoo(Foo& foo) {}; int main() { ProcessFoo(Foo(42)); return 0; }
ralat timbul kerana Foo(42) sementara ) objek sedang dihantar ke parameter rujukan bukan const (ProcessFoo(Foo& foo)). Dengan reka bentuk, C tidak membenarkan amalan ini.
Penyelesaian:
Penyelesaian yang dicadangkan mengurangkan isu dengan:
-
Mencipta Pembolehubah Sementara: Menetapkan objek sementara kepada pembolehubah dan kemudian menghantar ia sebagai rujukan:
Foo foo42(42); ProcessFoo(foo42);
Salin selepas log masuk -
Menggunakan Rujukan Const: Mengubah suai ProcessFoo untuk mengambil rujukan const (ProcessFoo(const Foo& foo)), yang membolehkannya untuk menerima sementara objek:
void ProcessFoo(const Foo& foo) {}; ProcessFoo(Foo(42));
Salin selepas log masuk -
Melalui Nilai: Membenarkan ProcessFoo menerima objek mengikut nilai (ProcessFoo(Foo foo)), yang mengelakkan sekatan rujukan:
void ProcessFoo(Foo foo) {}; ProcessFoo(Foo(42));
Salin selepas log masuk
Penyusun Percanggahan:
Perbezaan tingkah laku antara Microsoft Visual Studio dan GNU C (g ) mungkin disebabkan oleh tetapan lalai yang berbeza. Secara lalai, g menguatkuasakan pematuhan yang lebih ketat dengan standard C, manakala Visual Studio mungkin membenarkan penyelewengan tertentu. Ini boleh menyebabkan ralat dijana dalam satu pengkompil tetapi tidak yang lain.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Melewati Objek C Sementara kepada Rujukan Bukan Const?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apakah jenis nilai yang dikembalikan oleh fungsi bahasa C? Apa yang menentukan nilai pulangan?

Gulc: Perpustakaan C dibina dari awal

Langkah Format Fungsi Fungsi C Langkah Penukaran Kes

Apakah definisi dan peraturan panggilan fungsi bahasa C dan apakah itu

Di manakah nilai pulangan fungsi bahasa C yang disimpan dalam ingatan?

Penggunaan dan perkongsian frasa yang berbeza

Bagaimanakah saya menggunakan algoritma dari STL (jenis, mencari, mengubah, dll) dengan cekap?

Bagaimana Perpustakaan Templat St Standard (STL) berfungsi?
