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

Barbara Streisand
Lepaskan: 2024-10-28 10:05:29
asal
150 orang telah melayarinya

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

Visual Studio 2010: Membenarkan Rujukan Bukan Konst Mengikat kepada Nilai

Masalah:

Dalam coretan kod berikut, pengkompil Visual Studio 2010 (SP1) berjaya menyusun tanpa sebarang ralat atau amaran, walaupun ia nampaknya merupakan permulaan tidak sah bagi rujukan bukan const kepada nilai r sementara:

<code class="cpp">string foo() { return "hello"; }
int main()
{
    string& tem = foo(); // Should be illegal
}</code>
Salin selepas log masuk

Gelagat Jangkaan:

Menurut piawaian C, mengikat rujukan bukan const kepada nilai r hendaklah dianggap sebagai ralat atau amaran. Ini kerana rujukan bukan const hanya harus terikat pada lvalues ​​(objek dengan alamat tetap).

Gelagat VS2010:

Walau bagaimanapun, penyusun Visual Studio 2010 mempunyai sejarah membenarkan amalan ini sebagai lanjutan kepada bahasa. Tingkah laku ini tidak mengikut piawaian C dan secara amnya dianggap sebagai pepijat.

Sebab:

Sebab tingkah laku ini tidak jelas sepenuhnya, tetapi ia adalah dianggap berkaitan dengan fakta bahawa penyusun Visual Studio sentiasa lebih berlembut dari segi pemeriksaan ralat dan amaran. Kelonggaran ini mungkin telah diperkenalkan secara sengaja untuk membolehkan lebih fleksibiliti dalam menulis kod, walaupun ia tidak mengikut piawaian C.

Implikasi:

Tingkah laku ini boleh membawa implikasi untuk keselamatan dan prestasi kod. Mengikat rujukan bukan const kepada nilai r boleh membawa kepada hasil yang tidak dijangka, kerana nilai r mungkin diubah suai atau dimusnahkan pada bila-bila masa.

Penyelesaian:

Penyelesaian yang disyorkan adalah untuk mengelakkan rujukan bukan const mengikat kepada nilai r. Sebaliknya, gunakan sama ada rujukan const (yang boleh mengikat kedua-dua nilai l dan rnilai) atau penuding.

Atas ialah kandungan terperinci Mengapa Visual Studio 2010 Membenarkan Mengikat Rujukan Bukan Const 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
Artikel terbaru oleh pengarang
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!