Este sitio necesita una forma de permitir el seguimiento anónimo además de las respuestas anónimas.
¿Por qué, más de una vez, veo esta insensata afirmación de que un "índice" debe estar en unidades de 1 byte? Es todo lo contrario de la convención. Un "índice" suele ser simbólico, una medida cuya compensación de bytes físicos está determinada por el tamaño del elemento en la matriz (o vector, que incluso puede no tener el diseño físico de una matriz, pero entonces memcpy() también es irrelevante de curso).
Así, el 5º elemento en una matriz tiene "índice" 5, pero:
- Si la matriz es de tipo char, a continuación, el desplazamiento de ese "índice" byte es 5.
- Si el array es tipo short (en x86), entonces el offset de bytes de ese "índice" es 10.
- Si la matriz es de tipo int (en x86), el offset de bytes de ese "índice" es 20.
- Si la matriz es del tipo de algún objeto grande de 48 bytes, entonces el desplazamiento de bytes de ese "índice" es 240.
De qué manera es la forma correcta de acceder a ese elemento específico es un punto lateral. La parte importante es que comprenda la diferencia, elija una y haga que el código sea correcto.
Sobre el significado de las palabras, yo preferiría decir:
void* memcpy_offset(void *s1, const void *s2, size_t offset, size_t n);
que:
void* memcpy_index(void *s1, const void *s2, size_t index, size_t n);
encuentro la idea de que un vacío completo genérica * podría tener un "índice "ser engañoso. (Mientras estemos aquí, "dest" y "fuente" o "dentro" y "fuera" serían mucho menos ambiguos que "s1" y "s2". El código no necesita tantos comentarios cuando eliges por sí mismo nombres de variable.)
Tenga en cuenta: memcpy es C, no C++. Aunque lo uso con frecuencia, no hay duda de que memcpy en general está en total contraste con los principales conceptos de C++ como tipo de seguridad, herencia, excepciones. etc. Es muy fácil arruinar todo con memcpy. –
memcpy es parte del Estándar C++ –
Claro, en el sentido de que se proporciona a través del encabezado C. Sin embargo, C++ en sí proporciona 'std :: copy', que es _typically_ igual o quizás _ mejor que' memcpy', más mucho más flexible y, de nuevo, seguro para el tipo. –