Rumah >pembangunan bahagian belakang >C++ >## **Adakah Mengikat Rujukan Malar kepada Sub-Objek Sementara Memanjangkan Hayatnya? A Tale of GCC and Clang**

## **Adakah Mengikat Rujukan Malar kepada Sub-Objek Sementara Memanjangkan Hayatnya? A Tale of GCC and Clang**

Barbara Streisand
Barbara Streisandasal
2024-11-01 06:58:02578semak imbas

##  **Does Binding a Constant Reference to a Sub-Object of a Temporary Extend Its Lifetime? A Tale of GCC and Clang**

Mengikat Rujukan Malar kepada Sub-Objek Sementara

Tingkah Laku Piawai

Tingkah laku apabila mengikat rujukan malar kepada sub-objek sementara ditakrifkan oleh standard C dan berbeza-beza bergantung pada vendor pengkompil.

Perbezaan GCC dan Clang

  • GCC (versi 5.2.0): Memusnahkan tika P2d sementara sebelum memasukkan printf dalam utama, mengekalkan nilai dengan mencipta gandaan sementara yang lain.
  • Clang (versi X): Memanjangkan hayat tika P2d sementara kepada jangka hayat rujukan x, memanggil pemusnah selepas printf dalam utama.

Penjelasan

Menurut CWG 1651, hasil akses ahli atau ungkapan subskrip yang digunakan pada nilai harus dianggap sebagai nilai x. Ini menunjukkan bahawa pengikatan rujukan kepada subobjek sementara sedemikian tidak seharusnya memanjangkan hayat sementara.

Walau bagaimanapun, dalam contoh yang diberikan, kedua-dua penyusun menganggap center().x sebagai prvalue. GCC tidak memanjangkan hayat apabila menggunakan subobjek skalar kerana ia tidak dilindungi oleh [dcl.init.ref]/(5.2.1.1). Oleh itu, objek sementara boleh dimusnahkan lebih awal.

Sebaliknya, Clang telah melaksanakan resolusi tertunda kepada DR 1651, yang menyatakan bahawa jika E1 ialah ungkapan sementara dan E2 tidak menetapkan medan bit, maka E1 .E2 ialah ungkapan sementara. Memandangkan center() ialah ungkapan sementara mengikut takrifan ini, perkataan yang diubah suai dalam [class.temporary] /5 terpakai. Ia menyatakan dengan jelas bahawa objek sementara yang sepadan kekal sepanjang hayat rujukan.

Oleh itu, Clang memanjangkan hayat tika P2d sementara dalam kes ini, manakala GCC tidak.

Kesimpulan

Tingkah laku semasa dalam kedua-dua GCC dan Clang dijangka berubah setelah cadangan semakan kepada standard C diterima pakai.

Atas ialah kandungan terperinci ## **Adakah Mengikat Rujukan Malar kepada Sub-Objek Sementara Memanjangkan Hayatnya? A Tale of GCC and Clang**. 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