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
Mary-Kate Olsenasal
2024-11-22 06:50:15466semak imbas

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;
}

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!

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