Bedeutet „Speicher bereitstellen“ die „Objektrepräsentation“?C++

Programme in C++. Entwicklerforum
Guest
 Bedeutet „Speicher bereitstellen“ die „Objektrepräsentation“?

Post by Guest »

Bedenken Sie diesen Code:

Code: Select all

auto buffer = new unsigned char[MAX_LEN];
auto hdr1 = new (buffer) Header1{ /* ... */ };
size_t pos1 = sizeof(Header1);
auto hdr2 = new (buffer + pos1) Header2{ /* ... */ };
size_t pos2 = pos1 + sizeof(Header2);
hdr2->data_len = fread(buffer + pos2, 1, MAX_LEN - pos2, stdin);
network_sendto(peer, buffer, pos2 + hdr2->data_len);
Der Code soll die Objektdarstellung von Header1, gefolgt von der von Header2, gefolgt von den Benutzerdaten, an das Netzwerk senden.
Der aktuelle Standard besagt Folgendes ([basic.types.general]):

Die Objektdarstellung eines vollständigen Objekttyps T ist die Folge von N ohne Vorzeichen char-Objekte, die von einem Nicht-Bitfeld-vollständigen Objekt vom Typ T eingenommen werden, wobei N gleich sizeof(T) ist. Die Wertdarstellung eines Typs T ist ...... Die Objekt- und Wertdarstellung eines vollständigen Nicht-Bitfeld-Objekts vom Typ T sind die Bytes bzw. Bits des Objekts, die der Objekt- und Wertdarstellung seines Typs entsprechen. ......

Wenn ich es richtig verstehe, sobald der Puffer Speicher für den Header bereitstellt, wird ein Teil davon („die Sequenz von N unsigned char Objekte") wird automatisch zur Objektdarstellung des Headers. Ich denke also, dass der Code gültig ist.
Und ein Codebeispiel am Ende dieser Antwort scheint ebenfalls zuzustimmen.
  • Ist die obige Argumentation richtig? ? Weist der Code in einigen Aspekten UB auf?
  • Ich würde auch gerne wissen, ob er noch gültig ist, wenn P1839 in den Standard aufgenommen wird. Denn dieses Papier scheint die Definition der Objektdarstellung zu berühren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post