Mengapa Objek Sementara Dimusnahkan dalam Susunan Mengejutkan dalam C ?

DDD
Lepaskan: 2024-11-13 08:54:02
asal
275 orang telah melayarinya

Why Are Temporary Objects Destroyed in a Surprising Order in C  ?

Pemusnahan Objek Sementara dalam C

Kod yang disediakan menunjukkan tingkah laku yang mengejutkan apabila objek sementara dimusnahkan dalam susunan yang tidak dijangka. Walau bagaimanapun, tingkah laku ini sebenarnya dijamin oleh piawai C.

Penjelasan

Objek sementara, yang juga dikenali sebagai objek tanpa nama, dicipta apabila ungkapan menilai kepada jenis kelas yang bukan jenis rujukan. Ia biasanya digunakan untuk menyimpan hasil perantaraan semasa penilaian ungkapan.

Dalam kod yang diberikan, objek sementara jenis Foo dicipta daripada rentetan aksara literal dan pemusnahnya digunakan apabila hayat objek itu tamat. Pemusnah mencetak nama yang disimpan dalam ahli m_name objek.

Hayat objek sementara berakhir pada penghujung ungkapan penuh yang ia dicipta. Dalam kod yang disediakan, ungkapan penuh ialah pernyataan:

Foo{ "one" };
Salin selepas log masuk

Oleh itu, jangka hayat objek sementara berakhir pada koma bernoktah berikutan pernyataan ini. Akibatnya, pemusnah objek sementara digunakan dan rentetan "satu" dicetak.

Pengecualian kepada Peraturan

Sementara peraturan am menentukan bahawa objek sementara dimusnahkan pada akhir ungkapan penuh, terdapat beberapa pengecualian yang dinyatakan dalam piawaian C ([class.temporary] p5-p7):

  • Memendekkan jangka hayat objek sementara binaan lalai dalam pemula tatasusunan.
  • Memendekkan jangka hayat argumen lalai kepada pembina semasa tatasusunan disalin.
  • Memanjangkan jangka hayat objek sementara dengan mengikat rujukan kepada mereka.
  • Memanjangkan hayat objek sementara dalam pemula-julat-untuk.

Pengecualian ini membolehkan lebih fleksibiliti dalam mengurus jangka hayat objek sementara dalam situasi tertentu.

Atas ialah kandungan terperinci Mengapa Objek Sementara Dimusnahkan dalam Susunan Mengejutkan 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