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:
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!