Mengapa Mengikat Objek Sementara kepada Rujukan Malar Memanjangkan Jangka Hayatnya dalam C ?

DDD
Lepaskan: 2024-11-02 17:03:02
asal
626 orang telah melayarinya

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

Mengembalikan Objek Sementara dan Mengikat kepada Rujukan Malar

Dalam C , memberikan objek sementara kepada rujukan tetap ialah operasi biasa yang pada mulanya mungkin menimbulkan persoalan tentang jangka hayat sementara.

Soalan:

Mengapa kod berikut sah dan tidak mengakibatkan ralat pengkompil?

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

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

Jawapan:

C dengan jelas mentakrifkan bahawa mengikat objek sementara kepada rujukan berasaskan tindanan berterusan memanjangkan hayat sementara untuk dipadankan dengan rujukan. Dalam senario ini, sementara yang dikembalikan oleh foo() kekal sehingga akhir fungsi main().

Penjelasan:

  • Objek sementara biasanya mempunyai jangka hayat yang singkat, berakhir pada penghujung ungkapan yang ia muncul.
  • Walau bagaimanapun, C membenarkan pengecualian untuk rujukan const pada tindanan.
  • Dengan mengikat rujukan sementara kepada rujukan const pada tindanan. , jangka hayat sementara dilanjutkan agar sepadan dengan jangka hayat rujukan.
  • Ini menghalang ralat rujukan berjuntai yang disebabkan oleh rujukan yang menunjuk kepada objek yang telah dimusnahkan.

Nota:

  • Pengecualian ini hanya terpakai pada rujukan const berasaskan tindanan.
  • Ia tidak terpakai kepada rujukan yang merupakan ahli objek.
  • Untuk butiran lanjut, rujuk Herb Sutter "GotW #88: Calon Untuk "Konst Paling Penting"."

Atas ialah kandungan terperinci Mengapa Mengikat Objek Sementara kepada Rujukan Malar Memanjangkan Jangka Hayatnya 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!