Heim >Backend-Entwicklung >C++ >Kann memcpy verwendet werden, um ein trivial kopierbares Objekt in C zu erstellen?

Kann memcpy verwendet werden, um ein trivial kopierbares Objekt in C zu erstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-19 20:32:02637Durchsuche

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

Konstruieren eines trivial kopierbaren Objekts mit memcpy

Bei der Arbeit mit C können Entwickler auf Fragen bezüglich der Gültigkeit der Verwendung von memcpy zum Kopieren stoßen Darstellungsbytes eines Objekts. Insbesondere bestehen Zweifel, ob es sich bei diesem Akt um eine Objektkonstruktion oder -zuweisung handelt.

Diese Frage bleibt ungeklärt, da der C-Standard dieses Szenario nicht explizit berücksichtigt. Bestimmte Vorschläge und Diskussionen geben jedoch Hinweise zu diesem Thema.

Perspektive des offiziellen Standards

Im aktuellen C 14-Standardentwurf heißt es: „Ein Objekt wird erstellt [.. .] durch eine Definition, durch einen neuen Ausdruck oder bei Bedarf durch die Implementierung zum Kopieren zwischen bereits instanziierten Objekten.

Vorschlag p0593

Der Vorschlag p0593 versucht, dieses Problem anzugehen und die implizite Erstellung von Objekten für die Objektmanipulation auf niedriger Ebene zu definieren. Es schlägt vor, dass Objekte ausreichend trivialer Typen automatisch im neu zugewiesenen Speicher erstellt werden, um ein wohldefiniertes Verhalten sicherzustellen.

Gemäß p0593 sollten die folgenden Vorgänge implizit Objekte erstellen:

Erstellung eines Arrays von char, unsigned char oder std::byte
  • malloc, calloc, realloc, Operator New, Operator New[]
  • std::allocator::allocate
  • memmove (nach dem Kopieren des Quellspeichers in einen temporären Bereich)
Andere Überlegungen

Die Diskussion über [ub]-Typ-Wortspiele zur Vermeidung von Kopiervorgängen verdeutlicht die Komplexität zusätzlich dieses Themas.

Insgesamt sind die aktuellen Leitlinien zu diesem Thema offen für Interpretationen, aber Vorschläge wie p0593 zielen darauf ab, Klarheit und definiertes Verhalten für diese Vorgänge zu schaffen.

Das obige ist der detaillierte Inhalt vonKann memcpy verwendet werden, um ein trivial kopierbares Objekt in C zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn