Возможно к memcpy от двойного массива до массива плавающего безопасно?
Зависит от того, чего вы хотите. Значения, конечно, не будут сохранены. Если вам это нужно, используйте 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);
}
Проблема в том, что нет гарантии, что двоичное представление компилятора double
является эквивалентным представлением float
. Чтобы использовать memcpy
для многобайтовых типов, необходимо, чтобы базовое представление было одинаковым (тот же макет). Вы можете безопасно скопировать float
в float
, int
в int
и double
в double
].
Вы обречены на неопределенное поведение , когда исходный тип не соответствует целевому типу, например копирование из long
в char
или float
в двойной
. Функция memcpy
не выполняет никаких преобразований или рекламных акций. Он просто копирует.
В общем случае - нет.
В определенных случаях на данной платформе представление float
и double
может быть одинаковым, и копия будет успешной. Но в любом случае это не имеет практического смысла.