Rumah > pembangunan bahagian belakang > C++ > Apakah Maksud Double Ampersand (T&&) dalam C 11?

Apakah Maksud Double Ampersand (T&&) dalam C 11?

DDD
Lepaskan: 2024-12-19 14:25:13
asal
635 orang telah melayarinya

What Does the Double Ampersand (T&&) in C  11 Really Mean?

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

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:

  • Leraian beban berlebihan mengutamakan rujukan lnilai untuk lnilai dan rujukan rnilai untuk rnilai.
  • Rujukan rnilai boleh terikat kepada sementara yang terhasil daripada penukaran tersirat.
  • Rujukan rnilai yang dinamakan ialah lnilai, manakala rujukan rnilai yang tidak dinamakan ialah rvalues.

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

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

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!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan