std:: memcpy
|
Défini dans l'en-tête
<cstring>
|
||
|
void
*
memcpy
(
void
*
dest,
const
void
*
src,
std::
size_t
count
)
;
|
||
Effectue les opérations suivantes dans l'ordre :
- Crée implicitement des objets à dest .
- Copie count caractères (comme s'ils étaient de type unsigned char ) depuis l'objet pointé par src vers l'objet pointé par dest .
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
- dest ou src est un pointeur nul ou un pointeur invalide .
- La copie s'effectue entre des objets qui se chevauchent.
SommaireParamètres
Valeur de retourS'il existe un objet créé approprié , retourne un pointeur vers celui-ci ; sinon retourne dest . Notes
Plusieurs compilateurs C++ transforment les boucles de copie mémoire appropriées en appels à
Lorsque
l'aliasing strict
interdit d'examiner la même mémoire comme des valeurs de deux types différents,
Exemple
Exécuter ce code
#include <cstdint> #include <cstring> #include <iostream> int main() { // utilisation simple char source[] = "once upon a daydream...", dest[4]; std::memcpy(dest, source, sizeof dest); std::cout << "dest[4] = {"; for (int n{}; char c : dest) std::cout << (n++ ? ", " : "") << '\'' << c << "'"; std::cout << "};\n"; // réinterprétation double d = 0.1; // std::int64_t n = *reinterpret_cast<std::int64_t*>(&d); // violation d'aliasing std::int64_t n; std::memcpy(&n, &d, sizeof d); // OK std::cout << std::hexfloat << d << " est " << std::hex << n << " comme std::int64_t\n" << std::dec; // création d'objet dans le tampon de destination struct S { int x{42}; void print() const { std::cout << '{' << x << "}\n"; } } s; alignas(S) char buf[sizeof(S)]; S* ps = new (buf) S; // placement new std::memcpy(ps, &s, sizeof s); ps->print(); } Sortie : dest[4] = {'o', 'n', 'c', 'e'};
0x1.999999999999ap-4 est 3fb999999999999a comme std::int64_t
{42}
Rapports de défautsLes rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
Voir aussi
| |||||||||||||||||||||||||||||||||||