Pembina Alih Tersirat dan Operator Tugasan dalam Draf C 11 Awal
Walaupun pelaksanaan meluas pembina salinan lalai dan pengendali tugasan dalam C , ketiadaan pembina langkah lalai dan pengendali tugasan dalam draf awal piawaian C 11 telah menimbulkan persoalan di kalangan pengaturcara.
Sebab Ketiadaan Awal
Penjanaan operasi pergerakan tersirat telah menjadi subjek perdebatan berterusan dalam komuniti C. Draf awal piawaian C 11 kekurangan ciri tersirat ini disebabkan kebimbangan terhadap pemeliharaan kod yang bergantung pada jenis tidak boleh alih. Tambahan pula, tingkah laku std::move dengan objek tidak boleh alih menggunakan operator tugasan merumitkan isu.
Spesifikasi Semasa
Setakat spesifikasi November N3225, jika kelas tidak mentakrifkan pembina bergerak secara eksplisit, ia akan secara tersirat diisytiharkan sebagai lalai di bawah yang berikut syarat:
Syarat yang sama dikenakan pada pengisytiharan tersirat pengendali penugasan pindah. Perubahan ini sejajar dengan prinsip yang digariskan dalam N3203 dan N3201, yang menyokong syarat yang lebih ketat pada penjanaan pergerakan tersirat.
Penyelesaian
Jika tiada operasi pergerakan tersirat pada awal Draf C 11, satu penyelesaian adalah dengan melaksanakan secara manual pengendali tugasan bergerak dan pembina bergerak. Untuk mengelak daripada melaksanakan pengendali ini dalam setiap kelas, penyelesaian makro boleh digunakan. Jawapan GManNickG dalam soalan Stack Overflow memberikan contoh yang sesuai.
Atas ialah kandungan terperinci Mengapa Pembina Perpindahan Tersirat dan Operator Tugasan Tidak Hadir dalam Draf C 11 Awal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!