Std::memmove und std::memcpy benötigen laut cppreference Objekte als QuelleC++

Programme in C++. Entwicklerforum
Anonymous
 Std::memmove und std::memcpy benötigen laut cppreference Objekte als Quelle

Post by Anonymous »

Laut cppreference-Dokumentation würden std::memmove und std::memcpy eine Objektadresse als Eingabe erwarten, was theoretisch die Verwendung mit Puffern einschränkt, die von einer C-ähnlichen API erhalten wurden (

Code: Select all

mmap
, Netzwerkpuffer,...):

std::memmove

Definiert im Header

void* memmove( void* dest, const void* src, std::size_t count );

Führt die folgenden Vorgänge der Reihe nach aus:

1- Erstellt implizit Objekte am Ziel.

2- Kopiert count-Zeichen (als ob sie vom Typ unsigned char wären, dasselbe unten) aus dem Objekt, auf das src zeigt, in ein temporäres Array arr von count-Zeichen, wobei arr die Objekte, auf die dest und src zeigen, nicht überlappt.

3- Kopiert count-Zeichen von arr in das Objekt, auf das dest zeigt.


(Hervorhebung von mir).
Aber wenn man sich den Standard ansieht, folgt das Verhalten dieser Funktionen dem C-Standard (Abschnitt 7.28.2.3 für std::memmove), der diese Operationssequenz nicht beschreibt (da der Objektbegriff nicht derselbe ist wie in C++):

Beschreibung

Die memmove-Funktion kopiert n Zeichen vom Objekt, auf das s2 zeigt, in das Objekt, auf das s1 zeigt. Das Kopieren erfolgt so, als ob die n Zeichen des Objekts, auf das s2 zeigt, zuerst in ein temporäres Array von n Zeichen kopiert werden, das sich nicht mit den Objekten überschneidet, auf die s1 und s2 zeigen, und dann die n Zeichen aus dem temporären Array in das Objekt kopiert werden, auf das s1 zeigt.

Darüber hinaus erstellen diese Funktionen tatsächlich implizit Objekte an ihrem Ziel (https://eel.is/c++draft/cstring.syn#3).
Ist cppreference also übereifrig und können diese Funktionen legal an „rohem“ Speicherort verwendet werden (wie ich vom C-Standard vermute)? (Randbemerkung: Wie ist der Status eines Speicherorts, der von einer C-API (z. B. mmap) zurückgegeben wird, in C++? (Vielleicht sollte es eine andere Frage sein))

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post