Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah VS2010 Membenarkan Rujukan Bukan Const Diikat pada Nilai R?

Mengapakah VS2010 Membenarkan Rujukan Bukan Const Diikat pada Nilai R?

DDD
DDDasal
2024-10-28 03:22:31549semak imbas

Why Does VS2010 Allow Non-Const References to be Bound to Rvalues?

Ikatan Rujukan Bukan Konst pada Nilai R: Anomali VS2010

Dalam C , mengikat rujukan bukan const kepada nilai r biasanya dianggap satu kesilapan. Walau bagaimanapun, dalam Visual Studio 2010, kod berikut disusun tanpa sebarang ralat atau amaran:

<code class="cpp">string foo() { return "hello"; }
int main() 
{
    //below should be illegal for binding a non-const (lvalue) reference to a rvalue
    string& tem  = foo();   

    //below should be the correct one as only const reference can be bind to rvalue(most important const)
    const string& constTem = foo();   
}</code>

Tingkah laku ini tidak konsisten dengan penyusun lain seperti GCC dan VS2008, yang menimbulkan ralat kompilasi atau amaran untuk kod tersebut. Percanggahan ini telah menimbulkan persoalan sama ada ia adalah pepijat dalam VS2010.

Penjelasan

Gelagat VS2010 dalam kes ini dikaitkan dengan sambungan yang diketahui dalam penyusun VS . Dari segi sejarah, penyusun ini telah membenarkan rujukan bukan const terikat kepada nilai tanpa kelayakan const yang jelas. Tingkah laku ini diperkenalkan sebagai kemudahan untuk pengaturcara dan tidak dianggap sebagai ciri C standard.

Dalam kod contoh, kekurangan sebarang ralat atau amaran dalam VS2010 boleh dijelaskan seperti berikut:

  • Pengkompil mengiktiraf nilai pulangan foo() sebagai nilai r.
  • Ia mentafsirkan rentetan& perisytiharan tem sebagai rujukan bukan const kepada rentetan.
  • Walau bagaimanapun, disebabkan oleh sambungan dalam penyusun VS, ia membenarkan rujukan terikat kepada nilai r yang dikembalikan oleh foo().

Kesimpulan

Tingkah laku VS2010 dalam membenarkan rujukan bukan const untuk terikat kepada nilai tanpa ralat atau amaran bukan standard C dan dianggap sebagai lanjutan. Walaupun ia mungkin berguna dalam sesetengah kes, ia juga boleh membawa kepada tingkah laku yang tidak dijangka dan secara amnya tidak digalakkan untuk menggunakan rujukan const untuk mengikat nilai.

Atas ialah kandungan terperinci Mengapakah VS2010 Membenarkan Rujukan Bukan Const Diikat pada Nilai R?. 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