Pourquoi g ++ compile-t-il cela?
-
22-07-2019 - |
Question
Récemment, après avoir été très fatigué, j'ai écrit le code suivant:
GLfloat* array = new GLfloat(x * y * z);
Qui, bien sûr, aurait dû être:
GLfloat* array = new GLfloat[x * y * z];
(Notez les crochets par opposition à la parenthèse.)
Pour autant que je sache, le premier formulaire n'est pas valide, mais g ++ l'a compilé. Bien sûr, il a craché un segfault complètement incompréhensible, mais il a compilé.
Pourquoi?
La solution
GLfloat* array = new GLfloat(x * y * z);
Crée un pointeur appelé array
sur un objet de type GLfloat
avec la valeur x * y * z
.
Autres conseils
Le résultat de new T ()
est un T *
. Par conséquent, new GLFloat
renverrait un GLFloat *. Tant que x * y * z
est valide pour être transmis au constructeur de GLFloat, son code est valide.
C'est le même genre de chose que:
int * p = new int(42);
La première expression est un pointeur sur un objet GLfloat avec une valeur (x y z), ce qui est parfaitement légal.