std::memcpy
Definido en el archivo de encabezado <cstring> | ||
void* memcpy(void* dest, constvoid* src, std::size_t count ); | ||
Copia una cuenta count
de bytes del objeto apuntado por src
al objeto apuntado por dest
. Ambos objetos se reinterpretan como arrays de unsignedchar.
Si los objetos se traslapan, el comportamiento es indefinido.
Si bien dest
o src
es un puntero inválido o nulo, el comportamiento es indefinido, incluso si count
es cero.
Si los objetos potencialmente se traslapan o no son trivialmente copiables (TriviallyCopyable), el comportamiento de memcpy
no está especificado y puede estar indefinido.
Contenido |
[editar]Parámetros
dest | - | Puntero a la ubicación de memoria a la cual copiar. |
src | - | Puntero a la ubicación de memoria de la cual copiar. |
count | - | Número de bytes a copiar. |
[editar]Valor de retorno
dest
[editar]Notas
Se pretende que std::memcpy
sea la rutina de biblioteca más rápida para copiar de memoria a memoria. Habitualmente es más eficiente que std::strcpy, que debe escanear los datos que copia, o std::memmove, que debe tomar precauciones para manejar entradas traslapantes.
Varios compiladores de C++ transforman bucles de copiado de memoria adecuados para las llamadas a std::memcpy
.
Puede usarse std::memcpy
para convertir los valores donde el alias estricto prohibe examinar la misma memoria como valores de dos tipos distintos.
[editar]Ejemplo
#include <iostream>#include <cstdint>#include <cstring> int main(){// uso simplechar source[]="nada te turbe, nada te espante...", dest[4]; std::memcpy(dest, source, sizeof dest);for(char c : dest)std::cout<< c <<'\n'; // reinterpretandodouble d =0.1;// std::int64_t n = *reinterpret_cast<std::int64_t*>(&d); // violación del aliasstd::int64_t n; std::memcpy(&n, &d, sizeof d);// de acuerdo std::cout<<std::hexfloat<< d <<" es "<<std::hex<< n <<" como un std::int64_t\n";}
Salida:
n a d a 0x1.999999999999ap-4 es 3fb999999999999a como un std::int64_t
[editar]Véase también
Mueve un búfer a otro (función) | |
Llena un búfer con un carácter (función) | |
Copia una cierta cantidad de caracteres anchos entre dos arrays que no se superponen (función) | |
(C++11) | Copia un rango de elementos a una nueva ubicación. (plantilla de función) |
Copia un rango de elementos en orden inverso. (plantilla de función) | |
(C++11) | Comprueba si un tipo es trivialmente copiable. (plantilla de clase) |
Documentación de C para memcpy |