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

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

DDD
Lepaskan: 2024-12-10 22:29:10
asal
257 orang telah melayarinya

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

Melalui Objek Sementara sebagai Percanggahan Rujukan

Dalam C , objek sementara hanya boleh dihantar kepada rujukan yang diisytiharkan sebagai const, mengikut nilai, atau sebagai rujukan rnilai. Sekatan ini menghalang pengubahsuaian sementara yang tidak disengajakan, selalunya membawa kepada ralat masa jalan.

Ralat Pengkompil

Pertimbangkan kod berikut:

class Foo {
public:
    Foo(int x) {};
};

void ProcessFoo(Foo& foo) {
}

int main() {
    ProcessFoo(Foo(42));
    return 0;
}
Salin selepas log masuk

Di Linux dan Mac, kod ini gagal disusun dengan yang berikut ralat:

error: invalid initialization of non-const reference of type ‘Foo&’ from an rvalue of type ‘Foo’
Salin selepas log masuk

Ralat ini berpunca daripada percubaan untuk menghantar objek Foo sementara kepada parameter rujukan bukan const, yang C larang.

Penyelesaian

Untuk menyelesaikan isu ini, seseorang boleh menggunakan yang berikut penyelesaian:

  1. Buat Pembolehubah Sementara:
Foo foo42(42);
ProcessFoo(foo42);
Salin selepas log masuk

Di sini, pembolehubah foo42 sementara dicipta dan diluluskan melalui rujukan.

  1. Lewati Const Rujukan:
void ProcessFoo(const Foo& foo)
Salin selepas log masuk

Ini membolehkan objek sementara dilalui disebabkan oleh kelayakan const.

  1. Lulus Mengikut Nilai:
void ProcessFoo(Foo foo)
Salin selepas log masuk

Melalui nilai menyalin sementara ke dalam fungsi, memintas ralatnya.

Visual Studio lwn. g

Gelagat Visual Studio berbeza daripada g dalam kes ini. MSVC membenarkan menghantar sementara kepada rujukan bukan const, yang berpotensi memperkenalkan isu masa jalan yang halus. Tingkah laku ini berbeza dengan g , yang mematuhi piawaian C, melarang amalan sedemikian.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Melewati Objek Sementara kepada Rujukan Bukan Const 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan