Rumah >pembangunan bahagian belakang >C++ >Mengapa Visual Studio Membenarkan Rujukan Bukan Const Mengikat kepada Sementara?
Kes Keingintahuan Visual Studio tentang Rujukan Bukan Konst Mengikat Sementara
Tingkah laku Visual Studio terhadap mengikat rujukan bukan const kepada objek sementara telah menimbulkan kening di kalangan beberapa pengaturcara kerana sifatnya yang kelihatan bertentangan. Untuk memahami konteksnya, pertimbangkan coretan kod berikut:
class Zebra {int x;}; Zebra goo() {Zebra z; return z;} void foo(Zebra &x) { Zebra y; x = y; foo(goo()); }
Anehnya, Visual Studio membenarkan kod ini untuk disusun sementara gcc mengenal pasti ia sebagai ralat. Fenomena ini telah menyebabkan ramai tertanya-tanya tentang rasional di sebalik pendekatan Visual Studio.
Setelah diperiksa lebih dekat, ternyata Visual Studio menggunakan sambungan bahasa yang lebih lama. Laporan pepijat Microsoft memberi penerangan tentang isu ini, menyerlahkan bahawa Visual Studio membenarkan mengikat objek sementara kepada rujukan bukan const. Tingkah laku ini, bagaimanapun, boleh diperbetulkan dengan menggunakan pilihan pengkompil /Za, yang melumpuhkan sambungan bahasa.
Untuk menggambarkan lanjutan ini, pertimbangkan kod berikut:
struct A {}; A f1(); void f2(A&); int main() { f2(f1()); // This line triggers an error with `/Za` enabled }
Sebagai penyelesaian , Visual Studio menyokong amaran tahap 4 untuk kes sedemikian, yang boleh diaktifkan dengan menentukan /W4 semasa penyusunan. Walau bagaimanapun, perlu diingat bahawa pendekatan ini masih membenarkan kod untuk disusun, menyerlahkan fleksibiliti sambungan Visual Studio.
Atas ialah kandungan terperinci Mengapa Visual Studio Membenarkan Rujukan Bukan Const Mengikat kepada Sementara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!