Rumah >pembangunan bahagian belakang >C++ >Mengapa Visual Studio Menghimpun Rujukan Tidak Tetap kepada Sementara Sementara Penyusun Lain Tidak?

Mengapa Visual Studio Menghimpun Rujukan Tidak Tetap kepada Sementara Sementara Penyusun Lain Tidak?

Linda Hamilton
Linda Hamiltonasal
2024-12-25 20:24:13218semak imbas

Why Does Visual Studio Compile Non-Constant References to Temporaries While Other Compilers Don't?

Rujukan Tidak Malar Terikat Kepada Sementara: Anomali Visual Studio

Isu ini timbul apabila menyusun kod yang cuba mengikat rujukan bukan malar kepada objek sementara. Walaupun Visual Studio membenarkan kod sedemikian untuk menyusun, pengkompil lain, seperti gcc, mengenal pasti ia sebagai ralat kompilasi.

Penjelasan

Dalam contoh yang disediakan:

class Zebra {int x;};
Zebra goo() {Zebra z; return z;}
void foo(Zebra &x)
{
    Zebra y;
    x = y;
    foo(goo());
}

Kod cuba untuk mengikat rujukan bukan malar (Zebra &x) kepada objek sementara yang dikembalikan oleh fungsi goo(). Menurut piawaian C, ini sepatutnya menghasilkan ralat penyusunan.

Sambungan Studio Visual

Walau bagaimanapun, Visual Studio mempunyai sambungan lama yang membenarkan gelagat ini. Sambungan ini pada asasnya menganggap rujukan kepada objek sementara seolah-olah merujuk kepada objek bukan sementara.

Pelanjutan ini diperkenalkan untuk menyokong asas kod lama. Walau bagaimanapun, ia boleh membawa kepada tingkah laku yang tidak dijangka dan biasanya tidak disyorkan.

Pendekatan Disyorkan

Untuk mengelakkan anomali ini, sebaiknya lumpuhkan sambungan menggunakan /Za bendera pengkompil. Ini akan memastikan bahawa kod mematuhi piawaian C dan akan dikendalikan secara konsisten oleh penyusun yang berbeza.

Atas ialah kandungan terperinci Mengapa Visual Studio Menghimpun Rujukan Tidak Tetap kepada Sementara Sementara Penyusun Lain Tidak?. 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