Rumah >pembangunan bahagian belakang >C++ >Patutkah Pass-by-Value Menjadi Lalai dalam C 11 untuk Objek Besar?

Patutkah Pass-by-Value Menjadi Lalai dalam C 11 untuk Objek Besar?

Patricia Arquette
Patricia Arquetteasal
2024-12-02 17:35:11376semak imbas

Should Pass-by-Value Be the Default in C  11 for Large Objects?

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:

  • Objek yang tidak boleh disalin: Melewati rujukan memastikan tiada salinan yang tidak diperlukan dibuat.
  • Objek besar yang kerap dilalui oleh nilai: Operasi penyalinan masih boleh mahal, walaupun dengan semantik bergerak.
  • Objek yang dipindahkan antara utas: Melewati rujukan membolehkan penyegerakan benang yang cekap.

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!

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