Rumah > pembangunan bahagian belakang > C++ > Tugasan kepada Rvalues: Dilarang atau Ciri? Mengapa Kita Boleh Berikan Nilai Pulangan?

Tugasan kepada Rvalues: Dilarang atau Ciri? Mengapa Kita Boleh Berikan Nilai Pulangan?

Patricia Arquette
Lepaskan: 2024-10-31 09:19:30
asal
445 orang telah melayarinya

 Assignment to Rvalues: Forbidden or Feature? Why Can We Assign to a Return Value?

Tugasan kepada Rvalue: Mengapa dan Bagaimana?

Mengapakah mungkin untuk menetapkan kepada nilai pulangan (rvalue) jenis kelas? Secara konvensional, nilai r dianggap tidak kekal, tidak mempunyai alamat ingatan. Jadi, bagaimanakah ia boleh digunakan sebagai nilai sebelah kiri (lvalues)?

Pertimbangkan kod membingungkan berikut:

class Y {
public :
    explicit Y(size_t num = 0) {}
};

int main() {
    Y(1) = Y(0); // WHAT?!?
    return 0;
}
Salin selepas log masuk

Kod ini disusun tanpa ralat, walaupun ia mungkin kelihatan tidak logik. Untuk memahami sebabnya, kita perlu menyelidiki mekanik di sebalik pengendali tugasan.

Operator Tugasan Disintesis

Apabila kelas tidak mentakrifkan operator tugasan secara eksplisit, pengkompil secara automatik menjana satu. Operator yang disintesis boleh mengambil salah satu daripada dua bentuk:

  • Y& operator=(Y const&)
  • Y& operator=(Y&)()

The bentuk terakhir adalah ketara kerana ia terpakai kepada rnilai. Oleh itu, dalam contoh di atas, pengkompil menjana pengendali tugasan yang boleh menerima nilai r yang dikembalikan oleh pembina Y(1).

Mencegah Penetapan kepada Rvalue

Jika anda ingin melarang penugasan kepada nilai, anda boleh mengisytiharkan pengendali tugasan secara eksplisit dengan ref-qualifiers. Dengan cara ini, anda boleh menyekat pengendali untuk hanya menerima nilai. Contohnya:

class Y {
public :
    explicit Y(std::size_t num = 0);
    Y& operator=(Y const&) & = default;
};
Salin selepas log masuk

Dengan menggunakan ref-qualifier &, anda memastikan bahawa operator tugasan yang disintesis hanya tersedia untuk lvalues.

Atas ialah kandungan terperinci Tugasan kepada Rvalues: Dilarang atau Ciri? Mengapa Kita Boleh Berikan Nilai Pulangan?. 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