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

DDD
Lepaskan: 2024-11-01 20:57:02
asal
592 orang telah melayarinya

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>
Salin selepas log masuk

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!

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