Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Rujukan Const pada Tindanan Memanjangkan Jangka Hayat Objek Sementara dalam C?

Bagaimanakah Rujukan Const pada Tindanan Memanjangkan Jangka Hayat Objek Sementara dalam C?

Patricia Arquette
Patricia Arquetteasal
2024-10-26 19:11:021055semak imbas

How Do Const References on the Stack Extend the Lifetime of Temporary Objects in C  ?

Mengikat Objek Sementara pada Rujukan Const

Dalam C , mengikat objek sementara kepada rujukan kepada const pada tindanan memanjangkan hayatnya kepada itu daripada rujukan itu sendiri. Pengecualian kepada peraturan bahawa objek sementara biasanya tamat tempoh pada penghujung ungkapan yang disertakan membolehkan lebih fleksibiliti dan keselamatan dalam menangani objek sementara.

Pertimbangkan kod berikut:

<code class="cpp">string foo() {
  return string("123");
};

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>

Di sini , objek rentetan sementara dikembalikan daripada fungsi foo(). Biasanya, sementara ini tidak lagi wujud pada penghujung ungkapan penuh yang melibatkan foo(). Walau bagaimanapun, dengan mengikatnya pada val rujukan malar, hayat rentetan sementara dipanjangkan sehingga pendakap kerinting penutup.

Sisihan daripada peraturan seumur hidup sementara yang biasa ini membolehkan kod yang lebih selamat yang mengelakkan rujukan berjuntai. Dalam contoh di atas, rentetan sementara yang terikat pada val dijamin wujud selagi val wujud.

Perhatikan bahawa sifat ini hanya digunakan pada rujukan kepada const pada tindanan. Ia tidak memanjangkan hayat objek sementara yang dirujuk oleh pembolehubah ahli objek.

Untuk pemahaman yang lebih mendalam, rujuk Herb Sutter's GotW #88: Calon Untuk "Konst Paling Penting" tersedia di sini: https://www.gotw.ca/publications/mill19.htm.

Atas ialah kandungan terperinci Bagaimanakah Rujukan Const pada Tindanan Memanjangkan Jangka Hayat Objek Sementara 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