2010-06-02 15 views

Respuesta

30

Depende de lo que quieras. Los valores ciertamente no serán preservados. Si lo necesita, use 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

+11

Los comentarios deben tener al menos 15 caracteres de longitud, ¿pero esto no es válido para las respuestas? Extraño :) – fredoverflow

+0

Las respuestas deben tener al menos 15 caracteres de largo también :) –

+2

@Daniel Daranas: ¡Jaja! Acabo de ver tu feo hack para "superar" la limitación. Inteligente;) – ereOn

3

El problema es que no hay garantía de que la representación binaria del compilador de un double es la representación equivalente de un float. Para usar memcpy para tipos de múltiples bytes, la representación subyacente debe ser la misma (el mismo diseño). Puede copiar de manera segura float a float, int a int y double a double.

que están destinados para comportamiento indefinido cuando el tipo de fuente no coincide con el tipo de destino, como la copia de long a char o float a double. La función memcpy no realiza ninguna conversión ni realiza ninguna promoción. Simplemente copia.

1

En el caso general - no.

En casos específicos, en una plataforma determinada, la representación de float y double puede ser la misma, y ​​la copia tendrá éxito. Pero de todos modos no tiene ningún sentido práctico.