Rumah >pembangunan bahagian belakang >C++ >Bolehkah memcpy Digunakan untuk Membina Objek Trivial-Copyable dalam C ?

Bolehkah memcpy Digunakan untuk Membina Objek Trivial-Copyable dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-19 20:32:02635semak imbas

Can memcpy be Used to Construct a Trivially-Copyable Object in C  ?

Membina Objek Trivial-Copyable dengan memcpy

Apabila bekerja dengan C , pembangun mungkin menghadapi soalan mengenai kesahihan penggunaan memcpy untuk menyalin bait perwakilan sesuatu objek. Secara khususnya, keraguan timbul sama ada akta ini membentuk pembinaan objek atau tugasan.

Soalan ini masih belum dapat diselesaikan, kerana piawaian C tidak menangani senario ini secara eksplisit. Walau bagaimanapun, cadangan dan perbincangan tertentu memberikan panduan mengenai perkara itu.

Perspektif Standard Rasmi

Piawaian draf C 14 semasa menyatakan bahawa: "Suatu objek dicipta [.. .] dengan definisi, dengan ungkapan baharu atau dengan pelaksanaan apabila diperlukan."

Selain itu, klausa sedia ada yang menangani penyalinan jenis boleh salin remeh (cth., 3.9 [basic.types]) terutamanya memfokuskan pada penyalinan antara objek yang telah dibuat seketika.

Cadangan p0593

Cadangan p0593 cuba menangani isu ini dan mentakrifkan penciptaan objek tersirat untuk manipulasi objek peringkat rendah. Ia mencadangkan agar objek jenis yang cukup remeh dibuat secara automatik dalam storan yang baru diperuntukkan, memastikan gelagat yang jelas.

Menurut p0593, operasi berikut harus secara tersirat mencipta objek:

  • Penciptaan daripada tatasusunan char, unsigned char atau std::byte
  • malloc, calloc, realloc, operator new, operator new[]
  • std::allocator::allocate
  • memmove (selepas menyalin storan sumber ke kawasan sementara)

Pertimbangan Lain

Perbincangan tentang [ub] Type punning untuk mengelakkan penyalinan menyerlahkan lagi kerumitan topik ini.

Secara keseluruhan, panduan semasa mengenai subjek ini terbuka kepada tafsiran, tetapi cadangan seperti p0593 bertujuan untuk memberikan kejelasan dan tingkah laku yang jelas untuk operasi ini.

Atas ialah kandungan terperinci Bolehkah memcpy Digunakan untuk Membina Objek Trivial-Copyable dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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