C++ memcpy от двойного массива для плавания массива

Возможно к memcpy от двойного массива до массива плавающего безопасно?

12
задан dmessf 2 June 2010 в 15:18
поделиться

3 ответа

Зависит от того, чего вы хотите. Значения, конечно, не будут сохранены. Если вам это нужно, используйте 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);
}
31
ответ дан 2 December 2019 в 03:48
поделиться

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

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

4
ответ дан 2 December 2019 в 03:48
поделиться

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

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

1
ответ дан 2 December 2019 в 03:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: