2010-06-02 11 views

Odpowiedz

30

Zależy od tego, co chcesz. Wartości z pewnością nie zostaną zachowane. Jeśli potrzebujesz tego, użyj 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

nr

+11

Komentarze muszą mieć co najmniej 15 znaków, ale to nie wystarcza do odpowiedzi? Dziwne :) – fredoverflow

+0

Odpowiedzi muszą mieć co najmniej 15 znaków :) –

+2

@Daniel Daranas: Haha! Właśnie zobaczyłem twój brzydki hack, aby "pokonać" ograniczenia. Clever;) – ereOn

3

Problemem jest to, że nie ma gwarancji, że binarna reprezentacja kompilator o double jest odpowiednikiem reprezentacja float. Aby używać typów wielobajtowych, jest to, że podstawowa reprezentacja musi być taka sama (ten sam układ). Możesz bezpiecznie skopiować float do float, int do int i double do.

Jesteś są przeznaczone dla zachowanie niezdefiniowane gdy typ źródła nie pasuje do typu odbiorcy, takie jak kopiowanie z long do char lub float do double. Funkcja memcpy nie dokonuje żadnej konwersji ani nie wykonuje żadnych promocji. Po prostu kopiuje.

1

W ogólnym przypadku - nie.

W szczególnych przypadkach na danej platformie reprezentacja float i double może być taka sama, a kopia się powiedzie. Ale i tak nie ma to sensu praktycznego.

Powiązane problemy