Perché g ++ lo compila?
-
22-07-2019 - |
Domanda
Di recente, dopo essere stato molto stanco, ho scritto il seguente codice:
GLfloat* array = new GLfloat(x * y * z);
Che, ovviamente, avrebbe dovuto essere:
GLfloat* array = new GLfloat[x * y * z];
(Nota le parentesi quadre rispetto alla parentesi.)
Per quanto ne so, il primo modulo non è valido, ma è stato compilato da g ++. Certo, sputò un segfault completamente incomprensibile, ma compilato.
Perché?
Soluzione
GLfloat* array = new GLfloat(x * y * z);
Crea un puntatore chiamato array
su un oggetto di tipo GLfloat
con un valore di x * y * z
.
Altri suggerimenti
Bene, il risultato di new T ()
è un T *
, quindi new GLFloat
restituirebbe un GLFloat *. Finché x * y * z
è valido per passare al costruttore GLFloat, è un codice valido.
È lo stesso tipo di cose di:
int * p = new int(42);
Bene, la prima espressione è un puntatore a una GLfloat con valore (x y z), che è perfettamente legale.