Rumah > pembangunan bahagian belakang > C++ > Adakah Mengembalikan Pembolehubah Tempatan dalam C 17 Mengembalikan Salinan dan Memusnahkan Yang Asal (NRVO)?

Adakah Mengembalikan Pembolehubah Tempatan dalam C 17 Mengembalikan Salinan dan Memusnahkan Yang Asal (NRVO)?

Mary-Kate Olsen
Lepaskan: 2024-11-22 06:50:15
asal
442 orang telah melayarinya

Does Returning a Local Variable in C  17 Return a Copy and Destroy the Original (NRVO)?

Adakah Mengembalikan Pembolehubah Tempatan Mengembalikan Salinan dan Memusnahkan Yang Asal (NRVO)?

Dalam C 17, apabila pengoptimuman didayakan (khususnya , dinamakan pengoptimuman nilai pulangan atau NRVO), mengembalikan pembolehubah tempatan tidak melibatkan penyalinan objek asal. Sebaliknya, pengkompil mengoptimumkan kod untuk membina objek yang dikembalikan terus ke dalam storan di mana ia sebaliknya akan disalin. Ini bermakna objek asal dialihkan secara berkesan ke lokasi nilai pulangan dan tiada pemusnah dipanggil.

Walau bagaimanapun, jika pengoptimuman dilumpuhkan (menggunakan bendera -fno-elide-constructors), tingkah laku lalai diikuti :

  • Pembolehubah tempatan dibina seperti biasa.
  • Pembolehubah setempat kemudiannya dialihkan atau disalin (bergantung pada kebolehgerakannya) ke lokasi nilai pulangan.
  • Pembolehubah tempatan asal dimusnahkan.

Dalam kod yang anda berikan:

test function() {
    test i(8);
    return i;
}
Salin selepas log masuk

Dengan NRVO didayakan, hanya satu panggilan pembina dan pemusnah diperhatikan, menunjukkan bahawa objek i asal dipindahkan ke lokasi nilai pulangan tanpa penyalinan.

Dengan NRVO dilumpuhkan, kedua-dua panggilan pembina dan pemusnah diperhatikan untuk kedua-dua objek i asal dan objek nilai pulangan, menunjukkan bahawa objek i asal disalin dan kemudian dimusnahkan.

Oleh itu , jawapan kepada soalan anda bergantung pada sama ada pengoptimuman didayakan atau tidak. Dengan NRVO didayakan, mengembalikan pembolehubah tempatan tidak mengembalikan salinan dan tidak memusnahkan yang asal. Dengan NRVO dilumpuhkan, ia mengembalikan salinan dan memusnahkan yang asal.

Atas ialah kandungan terperinci Adakah Mengembalikan Pembolehubah Tempatan dalam C 17 Mengembalikan Salinan dan Memusnahkan Yang Asal (NRVO)?. 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