2009-03-15 14 views
0

Vor kurzem nach sehr müde zu sein, schrieb ich den folgenden Code:Warum kompiliert g ++ das?

GLfloat* array = new GLfloat(x * y * z); 

Was natürlich sein sollte: (. Auf die Klammer Beachten Sie die eckigen Klammern im Gegensatz)

GLfloat* array = new GLfloat[x * y * z]; 

Soweit ich weiß, die erste Form ist nicht gültig, aber g ++ kompiliert. Sicher, es spuckte einen völlig unverständlichen Fehler aus, aber es kompilierte.

Warum?

Antwort

15
GLfloat* array = new GLfloat(x * y * z); 

Erzeugt einen Zeiger array auf ein Objekt vom Typ GLfloat mit einem Wert von x * y * z genannt.

2

Nun, der erste Ausdruck ist ein Zeiger auf einen GLfloat mit Wert (x y z), die vollkommen legal ist.

9

Nun, das Ergebnis von new T() ist ein T*, also würde new GLFloat eine GLFloat * zurückgeben. Solange x*y*z gültig ist, um an den GLFloat-Konstruktor übergeben zu werden, ist es ein gültiger Code.

7

Es ist die gleiche Art von Dingen wie:

int * p = new int(42); 
Verwandte Themen