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
Lepaskan: 2024-12-25 20:24:13
asal
220 orang telah melayarinya

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());
}
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan