¿Por qué g ++ compila esto?
-
22-07-2019 - |
Pregunta
Recientemente, después de estar muy cansado, escribí el siguiente código:
GLfloat* array = new GLfloat(x * y * z);
Que, por supuesto, debería haber sido:
GLfloat* array = new GLfloat[x * y * z];
(Tenga en cuenta los corchetes en lugar del paréntesis).
Hasta donde yo sé, la primera forma no es válida, pero g ++ la compiló. Claro, escupió una segfault completamente incomprensible, pero se compiló.
¿Por qué?
Solución
GLfloat* array = new GLfloat(x * y * z);
Crea un puntero llamado array
para un objeto de tipo GLfloat
con un valor de x * y * z
.
Otros consejos
Bueno, el resultado de new T ()
es un T *
, por lo que new GLFloat
devolvería un GLFloat *. Mientras x * y * z
sea válido para pasar al constructor GLFloat, es un código válido.
Es el mismo tipo de cosas que:
int * p = new int(42);
Bueno, la primera expresión es un puntero a un GLfloat con valor (x y z), que es perfectamente legal.