Rumah >pembangunan bahagian belakang >C++ >Mengapa Visual Studio 2010 Membenarkan Rujukan Bukan Const Mengikat kepada Rvalues?

Mengapa Visual Studio 2010 Membenarkan Rujukan Bukan Const Mengikat kepada Rvalues?

DDD
DDDasal
2024-11-01 20:57:02602semak imbas

Why Does Visual Studio 2010 Allow Non-Const Reference Binding to Rvalues?

Membenarkan Pengikatan Rujukan Bukan Konst kepada Rvalue: A Anomali VS2010

Piawaian C melarang sama sekali mengikat rujukan bukan const kepada nilai r. Walau bagaimanapun, dalam anomali yang pelik, Visual Studio 2010 (SP1) menyusun kod berikut tanpa sebarang ralat atau amaran:

<code class="cpp">string foo() { return "hello"; }
int main() {
    string& tem = foo(); // Non-const reference to rvalue
}</code>

Percanggahan Tingkah Laku Penyusun

Sebaliknya, yang lain pengkompil mempamerkan tingkah laku yang lebih ketat:

  • GCC mengeluarkan ralat kompilasi, dengan betul mengenal pasti pengikatan haram rujukan bukan const kepada nilai r.
  • Visual Studio 2008 menyediakan amaran kompilasi, mengakui potensi isu tetapi membenarkan kompilasi diteruskan.

Penjelasan Anomali VS2010

Gelagat luar biasa dalam VS2010 ini berpunca daripada sambungan pengkompil yang diketahui. Tidak seperti GCC dan Visual Studio 2008, VS2010 membenarkan rujukan bukan const untuk terikat kepada rvalues ​​dalam kes tertentu, seperti apabila rvalue dijana oleh fungsi yang mengembalikan objek sementara.

Walaupun sambungan ini menentang standard, ia mungkin dilaksanakan untuk kemudahan. Walau bagaimanapun, ia boleh membawa kepada gelagat tidak ditentukan jika nilai r diubah suai selepas rujukan terikat.

Akibat dan Syor

Pelanjutan ini boleh memperkenalkan pepijat halus ke dalam kod yang bergantung pada pematuhan yang betul kepada piawaian C. Oleh itu, adalah amat disyorkan untuk mengelak daripada mengikat rujukan bukan const kepada rnilai, walaupun dalam VS2010. Sebaliknya, sentiasa gunakan rujukan const apabila mengikat rnilai, seperti yang dimaksudkan oleh standard.

Atas ialah kandungan terperinci Mengapa Visual Studio 2010 Membenarkan Rujukan Bukan Const Mengikat kepada Rvalues?. 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