Menyahmistikan Double Ampersand (T&&) dalam C 11
Di barisan hadapan ciri novel C 11 terletak ampersand berganda (&&), sering dilihat dalam pengisytiharan berubah-ubah seperti T&& var. Tetapi apakah sebenarnya yang diwakili oleh sintaks yang membingungkan ini?
Pengenalan kepada Rujukan Rvalue
Ampersan berganda mengisytiharkan rujukan rnilai, seperti yang ditakrifkan dalam dokumen cadangan standard. Tidak seperti rujukan tradisional (kini dirujuk sebagai rujukan nilai dalam C 11), yang hanya boleh mengikat kepada nilai (objek bernama), rujukan nilai boleh mengikat kepada nilai, termasuk sementara.
Perbezaan Utama daripada Rujukan Nilai L
Perbezaan utama antara rujukan rnilai dan Rujukan lvalue ialah rujukan rvalue boleh mengikat kepada rvalues tanpa memerlukan kata kunci const. Ini membolehkan sintaks undang-undang berikut:
T&& r = T();
Faedah Rujukan Rvalue
Rujukan Rvalue memberikan beberapa kelebihan penting:
1. Move Semantics:
Rujukan nilai memudahkan pelaksanaan pembangun alih dan pengendali tugasan pindah, yang membolehkan penempatan semula sumber yang cekap tanpa perlu menyalin data tanpa perlu.
2. Pemajuan Sempurna:
Dengan rujukan nilai, fungsi templat boleh memajukan hujah dengan betul, mengekalkan status nilai atau nilainya, membawa kepada kod yang lebih serba boleh dan boleh diselenggara.
Sifat Rvalue Rujukan:
Contoh: Move Semantics
Pertimbangkan pembina salinan berikut:
foo(foo const& other) { this->length = other.length; this->ptr = new int[other.length]; copy(other.ptr, other.ptr + other.length, this->ptr); }
Pembina salinan ini boleh diperbaiki dengan mengambil rujukan rnilai dalam pembina bergerak, yang mengubah suainya hujah:
foo(foo&& other) { this->length = other.length; this->ptr = other.ptr; other.length = 0; other.ptr = nullptr; }
Pembina bergerak ini berkesan "menggerakkan" sementara ke dalam objek yang baru dibina, mengelakkan penyalinan yang tidak perlu.
Kesimpulan:
Rujukan nilai R, dilambangkan dengan ampersand berganda (&&), memanjangkan keupayaan C dengan memperkenalkan sintaks rnilai khusus. Ia membolehkan semantik bergerak, pemajuan sempurna dan kecekapan yang dipertingkatkan dalam mengendalikan objek sementara, mengukuhkan kepentingannya dalam pengaturcaraan C moden.
Atas ialah kandungan terperinci Apakah Maksud Double Ampersand (T&&) dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!