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 :
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!