Rumah > pembangunan bahagian belakang > C++ > Berapa Lama C Temporaries Hidup dan Mengapa Kod Ini Berfungsi?

Berapa Lama C Temporaries Hidup dan Mengapa Kod Ini Berfungsi?

Susan Sarandon
Lepaskan: 2024-12-15 04:42:11
asal
267 orang telah melayarinya

How Long Do C   Temporaries Live and Why Does This Code Work?

Seumur Hidup Sementara

Dalam C , sementara dicipta atas pelbagai sebab, seperti mengembalikan nilai daripada fungsi atau menilai ungkapan. Memahami jangka hayat sementara adalah penting untuk tingkah laku program yang betul.

Pertimbangkan coretan kod berikut:

std::string foo() {
  std::string out = something...;
  return out;
}

void bar(const char* ccp) {
  // do something with the string..
}

bar(foo().c_str());
Salin selepas log masuk

Dalam kod ini, rentetan sementara yang dicipta oleh foo() dirujuk oleh const char* penunjuk dalam panggilan ke bar(). Timbul persoalan: mengapa kod ini sah?

Jawapannya terletak pada seumur hidup sementara. Menurut piawaian C, objek sementara dimusnahkan apabila ungkapan penuh yang secara leksikal mengandungi nilai r yang mencipta objek itu dinilai sepenuhnya.

Dalam kod di atas, ungkapan penuh ialah bar(foo().c_str ()). Penilaian ungkapan ini bermula pada ' (kurungan terbuka) dan berakhir pada ')' terakhir (kurungan penutup). Dalam ungkapan ini, rentetan sementara dicipta dengan menilai foo(), dan kaedah c_str() dipanggil sementara.

Oleh itu, rentetan sementara wujud pada permulaan ungkapan penuh dan ialah dimusnahkan apabila ungkapan dinilai sepenuhnya, iaitu selepas panggilan ke bar(). Ini menerangkan sebab penunjuk const char* dalam bar() masih merujuk kepada rentetan yang sah.

Ringkasnya, sementara yang dikembalikan oleh foo() hanya dimusnahkan sebaik sahaja ungkapan lengkap yang mengandunginya telah dinilai, memastikan bahawa penunjuk yang dikembalikan oleh foo().c_str() kekal sah sepanjang panggilan ke bar().

Atas ialah kandungan terperinci Berapa Lama C Temporaries Hidup dan Mengapa Kod Ini Berfungsi?. 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