В одной конкретной функции C++ у меня появляется указатель на большой буфер с плавающей точкой, который я хочу временно использовать, чтобы хранить половину числа удвоений. Есть ли способ использовать этот буфер в качестве пространства скреста для хранения удвоений, что также допускается (т.е. Не неопределенным поведением) стандартом?
В заключение я хотел бы:
void f(float* buffer)
{
double* d = reinterpret_cast<double*>(buffer);
// make use of d
d[i] = 1.;
// done using d as scratch, start filling the buffer
buffer[j] = 1.;
}
Насколько я понимаю, нет простого способа сделать это: если я правильно понимаю, reinterpret_cast<double*>
как это, вызывает неопределенное поведение из-за псевдонимов типов, а использование memcpy
или float/double union
невозможно без копирования данных и выделяя лишнее пространство, которое побеждает цель и в моем случае оказывается дорогостоящим (и использование объединения для пуна не допускается в C++).
Можно предположить, что поплавковый буфер правильно выровнен для использования для удвоения.