Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Saya Boleh Melepasi Nilai R melalui Rujukan Const dalam C ?

Mengapakah Saya Boleh Melepasi Nilai R melalui Rujukan Const dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-10-27 09:32:30292semak imbas

 Why Can I Pass Rvalues by Const Reference in C  ?

Memelihara Nilai R dengan Rujukan Const: A C Puzzle

Dalam C , menghantar nilai r (objek sementara) melalui rujukan const dibenarkan, tidak seperti rujukan biasa . Pertimbangkan atur cara berikut:

<code class="cpp">void display(const int& a) { cout << a; }

int main() {
  int a = 5;
  display(a);      // Works with an lvalue
  display(5);      // Also works with an rvalue
  return 0;
}</code>

Atur cara membenarkan menghantar kedua-dua nilai l dan rnilai ke fungsi paparan, walaupun rujukan ditandakan sebagai const. Tingkah laku ini membingungkan, kerana rujukan const biasanya dikaitkan dengan pemeliharaan nilai.

Sambungan Hayat Rujukan Const

Kunci untuk memahami tingkah laku ini terletak pada semantik rujukan const dalam C . Rujukan const memanjangkan hayat objek yang dirujuk sehingga akhir skop yang mengandungi. Dalam kes rvalue, ini berkesan menghalang pemusnahan objek sementara sehingga rujukan const keluar dari skop.

Contoh: Memanjangkan Rvalue Lifetime

Dalam kami contoh, perkara berikut berlaku apabila paparan(5) dipanggil:

  • Nilai r jenis int dicipta dengan nilai 5.
  • Rujukan const a terikat pada nilai r ini.
  • Rujukan const memanjangkan hayat nilai r sehingga penghujung fungsi paparan.
  • Nilai r digunakan dalam fungsi untuk mencetak nilai 5.
  • Apabila fungsi paparan kembali, rujukan const keluar dari skop, dan nilai r akhirnya dimusnahkan.

Ini menunjukkan cara rujukan const boleh terus menunjuk kepada nilai, membolehkan ia kekal wujud walaupun ia sebaliknya akan segera dimusnahkan.

Atas ialah kandungan terperinci Mengapakah Saya Boleh Melepasi Nilai R melalui Rujukan Const dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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