Rumah > pembangunan bahagian belakang > C++ > Bilakah Move Constructors dan Move Assignment Operator Dijana Secara Automatik dalam C?

Bilakah Move Constructors dan Move Assignment Operator Dijana Secara Automatik dalam C?

Patricia Arquette
Lepaskan: 2024-11-28 05:23:13
asal
892 orang telah melayarinya

When Are Move Constructors and Move Assignment Operators Automatically Generated in C  ?

Pindahkan Penjanaan Operasi dalam C

Dalam C 98, pembina salinan dan pengendali tugasan dijana secara automatik untuk kelas tanpa definisi tersuai. Walau bagaimanapun, dengan pengenalan semantik bergerak dalam C 11, penjanaan operasi bergerak memerlukan pertimbangan lanjut.

Penjanaan Automatik Operasi Alih

Gerakan pembina dan alihkan pengendali tugasan dijana secara automatik hanya jika keadaan tertentu met:

  • Semantik pergerakan lalai: Pengkompil menjana operasi pergerakan yang melakukan pergerakan bitwise ahli data objek.
  • Tiada ditentukan pengguna pemusnah: Jika kelas mempunyai pemusnah yang ditentukan pengguna, pengkompil tidak menjana pergerakan secara automatik operasi.
  • Tiada operasi penyalinan yang ditakrifkan pengguna: Begitu juga, jika kelas mempunyai operasi penyalinan yang ditakrifkan pengguna, pengkompil tidak menjana operasi alih secara automatik.

Pengecualian kepada Penjanaan Automatik

Dalam sesetengah kes, operasi pemindahan adalah tidak dijana secara automatik, walaupun syarat di atas dipenuhi. Contohnya:

  • Ahli kelas dengan jenis bergerak sahaja: Jika kelas mengandungi ahli dengan jenis bergerak sahaja (iaitu, jenis yang tidak boleh disalin), pengkompil tidak boleh secara automatik menjana operasi bergerak.
  • Kelas remeh: Kelas dengan hanya ahli data remeh (cth., integer, rentetan) telah mentakrifkan operasi salin dan alih secara tersirat, jadi pengkompil tidak menjana pelaksanaan tersuai.

Maklumat Tambahan

Pembentangan Howard Hinnant daripada persidangan ACCU 2014 menyediakan jadual komprehensif yang meringkaskan peraturan untuk penjanaan automatik ahli khas, termasuk bergerak operasi. Slaid menyerlahkan bahawa tingkah laku yang ditamatkan ditunjukkan oleh petak merah.

Untuk memastikan semantik pergerakan dikendalikan dengan betul, adalah disyorkan untuk mengikuti "peraturan 3" dari C 98/03. Ini bermakna mengisytiharkan secara eksplisit kedua-dua ahli salinan jika pemusnah diisytiharkan, atau mengisytiharkan sekurang-kurangnya satu daripada ahli salinan.

Atas ialah kandungan terperinci Bilakah Move Constructors dan Move Assignment Operator Dijana Secara Automatik dalam C?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan