Reutilizando un búfer flotante para dobles sin comportamiento indefinido

En una función particular de C ++, resulta que tengo un puntero a un gran búfer de flotantes que quiero usar temporalmente para almacenar la mitad de la cantidad de dobles. ¿Existe un método para usar este búfer como espacio reutilizable para almacenar los dobles, que también está permitido (es decir, no es un comportamiento indefinido) por el estándar?

En resumen, me gustaría esto:

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.;
}

or lo que veo, no hay una manera fácil de hacer esto: si entiendo correctamente, unreinterpret_cast<double*> como esto provoca un comportamiento indefinido debido al alias de tipo y el uso dememcpy o un flotador / dobleunion no es posible sin copiar los datos y asignar espacio adicional, lo que anula el propósito y resulta costoso en mi caso (y no está permitido usar una unión para el tipo de castigo en C ++).

e puede suponer que el búfer flotante está alineado correctamente para usarlo en dobles.

Respuestas a la pregunta(6)

Su respuesta a la pregunta