Maison >développement back-end >C++ >Memcpy peut-il être utilisé pour construire un objet trivialement copiable en C ?

Memcpy peut-il être utilisé pour construire un objet trivialement copiable en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-19 20:32:02637parcourir

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

Construction d'un objet trivialement copiable avec memcpy

Lorsqu'ils travaillent avec C , les développeurs peuvent rencontrer des questions concernant la validité de l'utilisation de memcpy pour copier le octets de représentation d’un objet. Plus précisément, un doute surgit quant à savoir si cet acte constitue une construction ou une affectation d'objet.

Cette question reste en suspens, car la norme C n'aborde pas explicitement ce scénario. Cependant, certaines propositions et discussions apportent des orientations en la matière.

Point de vue de la norme officielle

Le projet de norme C 14 actuel stipule que : « Un objet est créé [.. .] par une définition, par une nouvelle expression ou par l'implémentation si nécessaire."

De plus, les clauses existantes traitant de la copie de types copiables triviaux (par exemple, 3.9 [basic.types]) se concentrent principalement sur la copie entre des objets déjà instanciés.

Proposition p0593

La proposition p0593 tente de résoudre ce problème et de définir le création implicite d'objets pour la manipulation d'objets de bas niveau. Il propose que les objets de types suffisamment triviaux soient automatiquement créés dans le stockage nouvellement alloué, garantissant un comportement bien défini.

Selon p0593, les opérations suivantes devraient implicitement créer des objets :

  • Création de tableau de char, char non signé ou std::byte
  • malloc, calloc, realloc, opérateur new, opérateur new[]
  • std::allocator::allocate
  • memmove (après avoir copié le stockage source dans une zone temporaire)

Autres considérations

La discussion sur le jeu de mots [ub] pour éviter la copie souligne davantage la complexité de ce problème. sujet.

Dans l'ensemble, les orientations actuelles sur ce sujet sont sujettes à interprétation, mais des propositions telles que p0593 visent à apporter de la clarté et un comportement défini pour ces opérations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn