Rumah >pembangunan bahagian belakang >C++ >Mengapa Visual Studio Membenarkan Rujukan Bukan Const Mengikat pada Objek Sementara Walaupun GCC Tidak?

Mengapa Visual Studio Membenarkan Rujukan Bukan Const Mengikat pada Objek Sementara Walaupun GCC Tidak?

Patricia Arquette
Patricia Arquetteasal
2024-12-22 19:58:10824semak imbas

Why Does Visual Studio Allow Non-Const References to Bind to Temporary Objects While GCC Doesn't?

Ralat: Rujukan Bukan Konst Terikat Kepada Sementara dalam Visual Studio

GCC menimbulkan ralat apabila menetapkan objek sementara kepada bukan const rujukan. Anehnya, Visual Studio membenarkan ini. Mengapakah percanggahan itu?

Penjelasan terletak pada sambungan lama dalam Visual Studio. Seperti yang dinyatakan dalam laporan pepijat: "Objek Sementara Boleh Diikat kepada Rujukan Bukan Const," Visual Studio membenarkan objek sementara diikat kepada rujukan bukan const, walaupun ia boleh mengakibatkan tingkah laku yang tidak ditentukan.

Ini tingkah laku telah menjadi kontroversi. Satu respons kepada laporan pepijat menyatakan bahawa terdapat amaran tahap 4 untuk ralat ini, yang boleh didayakan dengan bendera pengkompil "/W4".

Walau bagaimanapun, terdapat cara untuk menjadikan ini ralat dalam Visual Studio: lumpuhkan sambungan bahasa dengan bendera "/Za". Ini ialah penyelesaian yang berguna jika anda ingin mematuhi piawaian C yang ketat dan mengelakkan tingkah laku kod yang berpotensi bermasalah.

Untuk menggambarkan, pertimbangkan contoh berikut:

class Zebra { int x; };
Zebra goo() { Zebra z; return z; }
void foo(Zebra &x)
{
    Zebra y;
    x = y;
    foo(goo()); // Error in GCC, allowed in Visual Studio
}

Dalam Visual Studio, kod ini akan menyusun tanpa ralat. Walau bagaimanapun, dalam GCC, ia akan menjana ralat kompilasi kerana objek sementara diberikan kepada rujukan bukan const.

Atas ialah kandungan terperinci Mengapa Visual Studio Membenarkan Rujukan Bukan Const Mengikat pada Objek Sementara Walaupun GCC 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