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

Patutkah Pass-by-Value Menjadi Lalai untuk Jenis Nilai dalam C 11?

Susan Sarandon
Susan Sarandonasal
2024-12-05 18:13:11412semak imbas

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

Pass-by-Value dalam C 11: Satu Penilaian Semula

Dalam C 11, pengenalan rujukan rnilai dan pembina bergerak telah mencetuskan perbahasan: patut lulus demi nilai menjadi lalai untuk nilai jenis?

Asal-usul Rujukan Laluan

Secara sejarah, menghantar objek besar mengikut nilai dalam C adalah tidak cekap kerana penyalinan yang tidak perlu. Parameter rujukan lebih disukai untuk mengelakkan pertindihan yang mahal. Walau bagaimanapun, rujukan memperkenalkan kerumitan dalam pemilikan dan pengurusan ingatan, terutamanya untuk objek yang diperuntukkan timbunan.

Paradigma Baharu dalam C 11

Dengan rujukan rnilai dan pembina bergerak, ia kini boleh dilaksanakan untuk melaksanakan jenis nilai seperti std::vector dan std::string yang murah untuk lulus mengikut nilai. Ini menimbulkan persoalan: adakah nilai lulus-demi-nilai menjadi standard baharu untuk jenis ini?

Pengesyoran

Menurut Dave Abrahams, nilai lulus disyorkan jika salinan diperlukan dalam fungsi. Ini membenarkan pengkompil untuk mengoptimumkan salinan, seperti yang dilihat dalam contoh berikut:

void foo(T t)
{
    // ...
}

Ini boleh digunakan secara fleksibel untuk menghantar lvalues, prvalues ​​atau xvalues:

T lval;
foo(lval); // copy from lvalue
foo(T {}); // (potential) move from prvalue
foo(std::move(lval)); // (potential) move from xvalue

Pengecualian

Rujukan lalu kepada const kekal sebagai pilihan yang munasabah untuk tertentu senario di mana salinan tidak diperlukan atau tidak diingini. Dalam kes sedemikian, sintaks berikut boleh digunakan:

class T {
    U u;
    V v;
public:
    T(U u, V v)
        : u(std::move(u))
        , v(std::move(v))
    {}
};

Kesimpulan

Dalam C 11, pass-by-value ialah pilihan yang menarik untuk jenis nilai yang memerlukan penyalinan dalam fungsi. Ia memudahkan pengendalian parameter dan membolehkan operasi pergerakan yang cekap. Walau bagaimanapun, rujukan terus kepada const kekal sebagai alternatif yang sesuai dalam kes di mana salinan tidak diperlukan.

Atas ialah kandungan terperinci Patutkah Pass-by-Value Menjadi Lalai untuk Jenis Nilai dalam C 11?. 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