2010-06-02 4 views

Répondre

30

Dépend de ce que vous voulez. Les valeurs ne seront certainement pas conservées. Si vous en avez besoin, utilisez std::copy.

#include <algorithm> 

int main() 
{ 
    double a[] = {1.618, 3.1416, 2.7, 0.707, 1.0}; 
    float b[5]; 
    std::copy(a, a + 5, b); 
} 
24

n °

+11

Les commentaires doivent comporter au moins 15 caractères, mais cela ne vaut pas pour les réponses? Étrange :) – fredoverflow

+0

Les réponses doivent contenir au moins 15 caractères. :) –

+2

@Daniel Daranas: Haha! Juste vu votre hack laid pour "surmonter" la limitation. Clever;) – ereOn

3

Le problème est qu'il n'y a aucune garantie que la représentation binaire d'un double du compilateur est la représentation équivalente d'un float. Pour utiliser memcpy pour les types multi-octets est que la représentation sous-jacente doit être la même (même mise en page). Vous pouvez copier en toute sécurité float à float, int à int et double à double.

Vous sont destinés à un comportement non défini lorsque le type de source ne correspond pas au type de destination, telles que la copie de long à char ou float à double. La fonction memcpy ne fait aucune conversion ou n'effectue aucune promotion. Ça ne fait que copier.

1

Dans le cas général - pas. Dans certains cas, sur une plate-forme donnée, la représentation de float et de double peut être la même, et la copie réussira. Mais cela n'a aucun sens pratique de toute façon.

Questions connexes