Rumah >pembangunan bahagian belakang >C++ >Patutkah Pass-by-Value Menjadi Lalai dalam C 11 untuk Objek Besar?
Memikirkan Semula Nilai Laluan dalam C 11
Dalam C tradisional, menghantar nilai ke dalam fungsi menimbulkan penalti prestasi untuk objek besar . Oleh itu, pengaturcara C memilih untuk rujukan lulus, meningkatkan kelajuan tetapi memperkenalkan kerumitan dalam pemilikan dan pengurusan ingatan, terutamanya untuk objek yang diperuntukkan timbunan.
C 11 memperkenalkan rujukan Rvalue dan menggerakkan pembina, membolehkan lulus yang cekap -nilai untuk objek besar seperti std::vector dan std::string. Ini menimbulkan persoalan sama ada nilai pas-demi harus menjadi lalai untuk jenis sedemikian.
Melalui Nilai: Lalai Baharu?
Menurut Dave Abrahams, pass-by-value boleh menjadi lalai pilihan jika penyalinan diperlukan dalam fungsi. Dengan membenarkan pengkompil mengendalikan penyalinan, pengaturcara boleh mengelakkan operasi penyalinan eksplisit:
void foo(T t) { // ... }
Berbanding dengan rujukan melalui:
void foo(T const& t) { auto copy = t; // ... }
Tawaran nilai pas demi fleksibiliti untuk pemanggil :
T lval; foo(lval); // copy from lvalue foo(T {}); // (potential) move from prvalue foo(std::move(lval)); // (potential) move from xvalue
Pengecualian kepada Pass-by-Value
Walaupun pass-by-value boleh sesuai untuk sesetengah jenis, passing by reference kepada const kekal sebagai pilihan yang munasabah:
Atas ialah kandungan terperinci Patutkah Pass-by-Value Menjadi Lalai dalam C 11 untuk Objek Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!