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
Lepaskan: 2024-12-05 18:13:11
asal
437 orang telah melayarinya

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)
{
    // ...
}
Salin selepas log masuk

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
Salin selepas log masuk

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))
    {}
};
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan