c++ memcpy valeur de retour
selon http://en.cppreference.com/w/cpp/string/byte/memcpy c++ memcpy
prend trois paramètres: la destination, la source et la taille/octets. il renvoie également à un pointeur. pourquoi donc? ne sont pas les paramètres assez pour l'entrée et la copie de données.
ou suis-je malentendu quelque chose? les exemples ne pas utiliser la valeur de retour
Vous devez vous connecter pour publier un commentaire.
Si une fonction n'a rien de spécifique pour le retour, il est souvent de coutume de retourner l'un des paramètres d'entrée (celui qui est considéré comme le primaire un). Cela vous permet d'utiliser "enchaînés" appels de fonction dans les expressions. Par exemple, vous pouvez faire
précisément parce que
strcpy
renvoie l'originaldst
valeur en tant que résultat. En gros, lors de la conception d'une telle fonction, vous pouvez choisir le paramètre le plus approprié pour le "chaînage" et de la renvoyer comme résultat (encore une fois, si vous avez notant d'autre pour le retour, c'est à dire, si votre fonction serait de retourvoid
).Certaines personnes aiment, d'autres personnes ne le font pas. C'est une question de préférence personnelle. Bibliothèque C standard, souvent, prend en charge cette technique,
memcpy
est un autre exemple. Une utilisation possible en cas, peut-être quelque chose le long des lignes deSi
memcpy
n'a pas renvoyé de la destination pointeur de la mémoire tampon, nous aurions probablement à mettre en œuvre ce qui précède quequi semble "plus". Il n'y a pas de raison de la différence d'efficacité entre ces deux implémentations. Et il est permis de penser que la version est plus lisible. Encore beaucoup de gens pourraient apprécier le "libre" occasion pour l'écriture concise, one-liners que la première version ci-dessus.
Assez souvent, les gens trouvent déroutant que
memcpy
renvoie la destination pointeur de la mémoire tampon, car il y a une croyance populaire que les retournant un pointeur forme d'une fonction doit normalement (ou toujours) indiquent que la fonction peut allouer/réallouer la mémoire. Tout ce pourrait indiquent en effet ce dernier, il n'y a pas de règle et il n'y a jamais été, de sorte que le souvent exprimé l'opinion que le retour d'un pointeur (commememcpy
n') est en quelque sorte "mauvais" ou "mauvaises pratiques" totalement infondées.IIRC, dans les premières versions de C il n'y a pas de
void
retour. Donc les fonctions de la bibliothèque qui ont été autour assez longtemps retour quelque chose pour des raisons d'héritage, et c'était le mieux qu'ils pouvaient trouver.Il y a un tas de fonctions dans
string.h
qui retournent le paramètre de destination:memcpy
,strcpy
,strcat
. Il n'est pas très utile, mais il ne fait pas de mal (probablement dans de nombreuses conventions d'appel ne nécessite même pas d'une instruction à mettre en œuvre).Vous pourrait peut-être venir avec une utilisation:
char *nextbuf = memcpy(get_next_buf(), previous_buf+offset, previous_size-offset);
au lieu dechar *nextbuf = get_next_buf(); memcpy(nextbuf, etc);
Ou quelque chose.À des fins de comparaison,
qsort
renvoie void. Il pourrait avoir été défini pour revenirbase
sur le principe de "retour à quelque chose, il pourrait être utile", mais ne l'était pas.std::copy
plutôt plus utilement retourne un itérateur à la fin de la plage de sortie. Pour les non-random-access itérateurs qui pourrait ne pas être facile, ni même possible, pour l'appelant à calculer.Par renvoi d'une valeur, d'une invocation de la fonction memcpy peut être utilisé comme une r-valeur.
Vous pouvez lancer le retour dans le vide si vous souhaitez indiquer que vous ne l'utilisez pas - par exemple:
(void) memcpy(mydest, mysrc, mybytes);