Rumah >pembangunan bahagian belakang >C++ >Mengapa Visual Studio Menghimpun Rujukan Tidak Tetap kepada Sementara Sementara Penyusun Lain Tidak?
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!