std::memmove
| Definiert in Header <cstring> |
||
| void* memmove( void* dest, const void* src, std::size_t count ); |
||
Führt die folgenden Operationen in der angegebenen Reihenfolge aus
- Erzeugt implizit Objekte an dest.
- Kopiert count Zeichen (als ob vom Typ unsigned char, unten ebenfalls) aus dem Objekt, auf das src zeigt, in ein temporäres Array arr von count Zeichen, wobei arr nicht mit den Objekten überlappt, auf die dest und src zeigen.
- Kopiert count Zeichen aus arr in das Objekt, auf das dest zeigt.
Wenn dest oder src ein Nullzeiger oder ein ungültiger Zeiger ist, ist das Verhalten undefiniert.
Inhalt |
[edit] Parameter
| dest | - | Zeiger auf den Speicherort, zu dem kopiert werden soll |
| src | - | Zeiger auf den Speicherort, von dem kopiert werden soll |
| zählt | - | Anzahl der zu kopierenden Bytes |
[edit] Rückgabewert
Wenn ein geeignetes erzeugtes Objekt vorhanden ist, wird ein Zeiger darauf zurückgegeben; andernfalls wird dest zurückgegeben.
[edit] Hinweise
Obwohl die Spezifikation besagt, dass ein temporärer Puffer verwendet wird, verursachen tatsächliche Implementierungen dieser Funktion nicht den Overhead von doppeltem Kopieren oder zusätzlichen Speicher. Für kleine count können Register geladen und geschrieben werden; für größere Blöcke ist ein gängiger Ansatz (glibc und bsd libc), Bytes vorwärts vom Anfang des Puffers zu kopieren, wenn das Ziel vor der Quelle beginnt, und rückwärts vom Ende, wenn dies nicht der Fall ist, mit einem Fallback auf std::memcpy, wenn überhaupt keine Überlappung vorliegt.
Wo Strict Aliasing das Betrachten desselben Speichers als Werte zweier verschiedener Typen verbietet, kann std::memmove verwendet werden, um die Werte zu konvertieren.
[edit] Beispiel
Ausgabe
1234567890 1234456890
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 4064 | C++98 | Es war unklar, ob der zurückgegebene Zeiger auf ein geeignetes erzeugtes Objekt zeigt | wurde klargestellt |
[edit] Siehe auch
| kopiert einen Puffer in einen anderen (Funktion) | |
| füllt einen Puffer mit einem Zeichen (Funktion) | |
| kopiert eine bestimmte Anzahl breiter Zeichen zwischen zwei, möglicherweise überlappenden, Arrays (Funktion) | |
| (C++11) |
Kopiert einen Elementbereich an einen neuen Speicherort (Funktionstempelat) |
| Kopiert einen Elementbereich in umgekehrter Reihenfolge (Funktionstempelat) | |
| (C++11) |
prüft, ob ein Typ trivial kopierbar ist (Klassenvorlage) |
| C-Dokumentation für memmove
| |