2010-06-02 5 views

ответ

30

Зависит от того, что вы хотите. Значения, безусловно, не будут сохранены. Если вам это нужно, используйте 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

No.

+11

Комментарии должны быть длиной не менее 15 символов, но это не подходит для ответов? Strange :) – fredoverflow

+0

Ответы должны быть не менее 15 символов, тоже :) –

+2

@ Даниэль Даранас: Ха-ха! Просто видел, как ваш уродливый хак «преодолел» ограничение. Умный;) – ereOn

3

Проблема заключается в том, что нет никакой гарантии, что бинарное представление компилятора из double является эквивалентом представление float. Для использования memcpy для многобайтовых типов заключается в том, что основное представление должно быть одинаковым (тот же макет). Вы можете смело скопировать float в float, int - int и double - double.

Вы обречены на неопределенное поведение когда тип источника не соответствует типу назначения, такие как копирование с long в char или float к double. Функция memcpy не делает никаких преобразований и не выполняет никаких рекламных акций. Он просто копирует.

1

В общем случае - нет.

В определенных случаях на данной платформе представление float и double может быть одинаковым, и копия будет успешной. Но в любом случае это не имеет никакого практического смысла.

Смежные вопросы