Mengapakah VS2010 Membenarkan Rujukan Bukan Const Diikat pada Nilai R?

DDD
Lepaskan: 2024-10-28 03:22:31
asal
548 orang telah melayarinya

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!