Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Melewati Objek C Sementara kepada Rujukan Bukan Const?

Mengapa Saya Tidak Boleh Melewati Objek C Sementara kepada Rujukan Bukan Const?

Linda Hamilton
Lepaskan: 2024-11-29 21:01:13
asal
672 orang telah melayarinya

Why Can't I Pass a Temporary C   Object to a Non-Const Reference?

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; }
Salin selepas log masuk

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!

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